深入了解bootlin嵌入式開發

一、什麼是bootlin

Bootlin是一家提供嵌入式Linux開發的顧問公司,公司前身稱為“Free Electrons”。其專註於開發、支持和培訓在嵌入式領域中廣泛使用的開源技術,如Linux、U-Boot、Buildroot、BusyBox等。

與其它嵌入式開發顧問公司不同,Bootlin開發的開源軟件項目被廣泛採用和推廣,如U-Boot、Linux內核功能等。

自2018年以來,Bootlin已為全世界數百個公司提供了服務,在很多頂級的嵌入式啟動板上應用廣泛。

二、bootlin開發項目案例

1、基於SAM9G35的精密攝像機

SAM9G35是Atmel公司的一款基於ARM9內核的SoC芯片。該攝像機採用了Linux操作系統,並集成了OpenCV和ALSA進行圖像和聲音處理。該項目是Bootlin將它在嵌入式Linux操作系統和視頻處理方面的深厚技術優勢與客戶的需求相結合的成功案例。

/******************************************************************************
 * capture.h
 *
 *****************************************************************************/

#ifndef __CAPTURE_H__
#define __CAPTURE_H__

#define MAX_CAMERAS 10

/* Structures to pass arguments to threads */
struct buffer {
    void * start;
    size_t length;
};

struct thread_param {
    int camera_idx;
    char subdev_name[32];
    struct v4l2_format format;
    int fd;
    struct buffer * buffers;
    int n_buffers;
    int width;
    int height;
    int nb_pixelformats;
    struct v4l2_pix_format * pix_fmts;
    int * in_menu_items;
    int * out_menu_items;
    int nb_in_menu_items, nb_out_menu_items;
    double query_time;
    int keep_count;
    int * counter;
    pthread_mutex_t * mutex;
    pthread_cond_t *  condition;
};

/* Structures to store personal settings */
struct preset {
    char    name[32];
    int     standard;
    int     input;
    int     hor_size;
    int     ver_size;
    int     fps;
    int     fourcc;
    int     ircut;
};

struct personal_settings {
    int     active_camera;
    int     active_preset;
    struct preset presets[MAX_CAMERAS][11];
};

#endif

2、RRZ Robotics平台

RRZ Robotics是一家專業的機器人公司,提供各種服務,包括基於ROS的機器人和自動化系統開發。Bootlin為該公司提供了關鍵技術支持,並為他們的生產策略提供了基於Yocto Project的構建方法。

# Process of configuring the Access Point associated with the Wi-Fi Cellular Gateway

# Connect an Ethernet cable to the LAN port of the Gateway and to your computer.
# Set your computer's Ethernet adapter to DHCP mode.
# Execute: ping 192.168.2.1 to find out whether the device is reachable (stay connected via Ethernet).
# Disconnect the modem from the Gateway.
# Enter the following command in your Terminal:
ssh root@192.168.2.1

Password authentication should be enabled for the root user. After successful login, the command prompt should show:

root@linaro-alip: ~#

  If your shell prompt indicates a different path, please set your gateway IP in the Linux environment variable GATEWAY_IP. For example: export GATEWAY_IP=192.168.2.1

三、與bootlin相關的技術領域

1、Buildroot

Buildroot是一個簡單、高效、易於使用的工具,可用於自動構建嵌入式Linux系統。它是一個由Makefile和Kconfig文件組成的構建系統,可讓用戶對Linux內核、Bootloader、庫和應用程序等進行配置和構建。

由於Bootlin在Buildroot的開發和維護方面有很深的參與,因此Buildroot是Bootlin的技術水平的體現,同時也為許多嵌入式和嵌入式Linux開發人員提供了一個快速簡便的構建系統。以下是一個Buildroot示例:

## To have a web page in our target system, we can simply use the lighttpd package
## that will provide a web server and we can use a package that will provide
## content (here a sample "static" web site)
##
## For packages that require configuration, we need to pass-through a
## configuration file and this is done via the Config.in file
##
## As a bonus, we'll add a configuration to update the system time from the
## internet

menu "Target Packages"
    menu "Web servers"
        source "package/lighttpd/Config.in"
        source "package/kosarko/buildroot-package/Config.in"
    endmenu

    source "package/ntp/Config.in"

endmenu

2、U-Boot

U-Boot是一個開放源代碼的引導加載程序。U-Boot可以從Flash、RAM和其他儲存器中啟動操作系統,並支持大多數的芯片架構和開發平台,例如ARM、MIPS和x86等,並且是嵌入式Linux開發中的標準引導加載程序。

U-Boot是Bootlin以及社區的成員們共同維護的一款開源軟件項目,它將開源軟件的應用推廣到嵌入式設備的啟動過程中。以下是一個U-Boot示例:

U-Boot 2016.11 (Dec 29 2017 - 10:52:58 -0200)

CPU:   AArch64 Processor [410fd034]
Model: Rockchip RK3399 Ibox3399
Board: Ibox3399
DRAM:  4 GiB
MMC:   DWMMC@fd800000: 2, DWMMC@fd820000: 1
MMC Device 1 not found
MMC Device 2 not found
MMC Device 3 not found
MMC Device 0 not found
no mmc device at slot 0
no mmc device at slot 1
no mmc device at slot 2
no mmc device at slot 3
In:    serial@11030000
Out:   serial@11030000
Err:   serial@11030000
Model: Rockchip RK3399 Ibox3399

四、bootlin的開發與課程培訓

1、嵌入式Linux開發課程

一些大企業、小公司和個人都關注嵌入式Linux開發領域的培訓。Bootlin的嵌入式Linux培訓是一個經過實踐驗證的培訓,它涵蓋了從最低層的系統的構建到應用程序的開發和應用。以下是培訓的主要內容:

  • 構建和裁剪Linux內核和用戶空間工具鏈。
  • 封裝Linux文件系統作為root文件系統。
  • 交叉編譯和調試應用程序。
  • 使用Bootlin的Emulator,訓練課程到實際開發項目的轉化。

2、Linux Device Drivers開發課程

Linux驅動程序非常基礎,涉及嵌入式Linux的高級內核開發技術。成為一名嵌入式Linux內核開發人員的第一步是學習如何編寫驅動程序。Bootlin的Linux Device Drivers開發課程是開發Linux驅動程序的最佳方式,以下是培訓的主要內容:

  • 了解Linux驅動程序概念。
  • 學習如何管理內核數據結構。
  • 學習如何自實現一個基於字符設備的設備驅動程序,了解ioctl函數。
  • 學習如何實現一個基於內核線程和等待隊列的字符設備驅動程序,了解如何使驅動程序支持讀寫操作。
  • 學習如何實現一個基於中斷的字符設備驅動程序,了解如何使用中斷和原子操作。
  • 運行之前自己寫的驅動程序。

五、結語

總之,Bootlin是一個深入研究嵌入式Linux的技術專家和第三方機構。它的技術專家通常是Linux社區中活躍的成員,他們貢獻了大量的patch、維護了許多的開源項目。

正是Bootlin提供了與Linux相關的一系列產品和服務,使許多公司和開發人員可以更輕鬆和更有效地使用Linux和相關技術,同時也在許多嵌入式設備項目中完成了重要的工作。

原創文章,作者:UGYB,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/136076.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
UGYB的頭像UGYB
上一篇 2024-10-04 00:15
下一篇 2024-10-04 00:15

相關推薦

  • 從零入坑嵌入式及相關優質資源推薦

    對於一個全能編程開發工程師而言,嵌入式開發是不可忽視的領域。本文將從入坑嵌入式的不同方面進行詳細闡述,並推薦一些優質資源。 一、嵌入式開發簡介 嵌入式開發是指將多種軟硬件技術融合在…

    編程 2025-04-28
  • Shell嵌入式介紹及應用

    本文將介紹Shell嵌入式的概念、特點和應用,並針對嵌入式系統開發中的一些問題,給出相應的解決方案。 一、Shell嵌入式概念 Shell嵌入式是一種將Shell(命令行解釋器)嵌…

    編程 2025-04-28
  • 深入解析Vue3 defineExpose

    Vue 3在開發過程中引入了新的API `defineExpose`。在以前的版本中,我們經常使用 `$attrs` 和` $listeners` 實現父組件與子組件之間的通信,但…

    編程 2025-04-25
  • 深入理解byte轉int

    一、字節與比特 在討論byte轉int之前,我們需要了解字節和比特的概念。字節是計算機存儲單位的一種,通常表示8個比特(bit),即1字節=8比特。比特是計算機中最小的數據單位,是…

    編程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什麼是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一個內置小部件,它可以監測數據流(Stream)中數據的變…

    編程 2025-04-25
  • 深入探討OpenCV版本

    OpenCV是一個用於計算機視覺應用程序的開源庫。它是由英特爾公司創建的,現已由Willow Garage管理。OpenCV旨在提供一個易於使用的計算機視覺和機器學習基礎架構,以實…

    編程 2025-04-25
  • 深入了解scala-maven-plugin

    一、簡介 Scala-maven-plugin 是一個創造和管理 Scala 項目的maven插件,它可以自動生成基本項目結構、依賴配置、Scala文件等。使用它可以使我們專註於代…

    編程 2025-04-25
  • 深入了解LaTeX的腳註(latexfootnote)

    一、基本介紹 LaTeX作為一種排版軟件,具有各種各樣的功能,其中腳註(footnote)是一個十分重要的功能之一。在LaTeX中,腳註是用命令latexfootnote來實現的。…

    編程 2025-04-25
  • 深入了解Python包

    一、包的概念 Python中一個程序就是一個模塊,而一個模塊可以引入另一個模塊,這樣就形成了包。包就是有多個模塊組成的一個大模塊,也可以看做是一個文件夾。包可以有效地組織代碼和數據…

    編程 2025-04-25
  • 深入理解Python字符串r

    一、r字符串的基本概念 r字符串(raw字符串)是指在Python中,以字母r為前綴的字符串。r字符串中的反斜杠(\)不會被轉義,而是被當作普通字符處理,這使得r字符串可以非常方便…

    編程 2025-04-25

發表回復

登錄後才能評論