如何正確開發 linux bsp?
1. bsp 開發是不是給一個新的 arm linux 系統開發能夠支持板子外設的 linux 內核源碼 的過程?
2. bsp 開發的任務界限是什麼呢?即哪些內容開發屬於這部分任務,而不是 bootloder 和 根文件系統開發部分的任務?(是否包含內核移植,需要重新初始化cpu,內存,哪些關鍵必要外設,和網路之類的用於內核中?)3. 有沒有主流的開發流程呢?(是不是應先解決 cpu 內存,再找已有驅動的代碼,再開發特殊外設驅動,再規範源碼結構,這種流程?)
簡單點說Linux BSP開發就是把Linux在某個板子上跑起來。
這個板子不一定是ARM的,可能是任何一個arch的,比如PPC/MIPS,甚至x86也可以算上,還有一些比較少見的像SPARC/ColdFire之類的。
題主可能比較疑惑BSP應該開發到什麼程度是吧?也就是說要把Linux跑到什麼程度?是有個串口能跑shell就可以了?還是網路、USB什麼的都要全弄起來?
據我了解(我隔壁就是BSP Team),跑到什麼程度,看公司(客戶、老闆)的開發要求,同時也看公司有沒有上層的開發人員專門管這些事情。
比如,你這個板子只用在很簡單的環境里,網路、USB都不需要,那麼串口能起來就基本可以了。但是如果恰好客戶有要求網路必須是OK的,那做BSP的人一般就要把網路也調通,如果客戶要求USB能用,那麼做BSP的人可能也要弄USB。
實際開發過程中,BSP開發的邊界在哪,看老闆、客戶的要求。
一般來說開發流程,初始化CPU、內存這些是第一步,然後是串口、shell、文件系統也要起來,然後就是根據需求是否要調一些基本的驅動了。
我見過有些板子,客戶只要最基本的東西,這種BSP開發很輕鬆,但是有些板子,連USB-OTG都要起來,那麼開發BSP的人就很苦逼,因為USB-OTG太難搞了,但沒辦法,只能硬著頭皮去學、去搞。
BSP開發的邊界就是沒邊界,當然,有些公司比較好,會專門招幾個驅動工程師,這種公司里,開發BSP的人會稍微輕鬆點,搞不定的就丟給寫驅動的人了——就是我這樣的。就我的有限經驗:
- 不僅是 ARM,也有 MIPS 或者 PPC 等架構的 SoC;BSP 開發是在原廠給出的開發包基礎上,根據硬體的不同修改配置(以及代碼)和驅動最小系統(CPU、匯流排、串口、內存、快閃記憶體)。
- (3.)根據維基百科相關信息,BSP 開發的工作(也是流程)包括:
- 初始化 CPU
- 初始化匯流排
- 初始化中斷控制器
- 初始化時鐘
- 初始化內存設置
- 配置地址段
- 從快閃記憶體中載入 Bootloader 到內存並運行
參考:
Board support package簡單來說就是在開發版上運行bootloader,初始化硬體,根據需要引導啟動操作系統。說白了就是讓你寫bootloader 和硬體驅動。目前領導對要求我寫的 bsp 要完成的工作。
推薦閱讀:
※linux mmap匿名映射的作用是什麼?
※segfault at xxx的地址是物理地址還是線性地址,objdump出來的呢?
※Linux的啟動過程中,滿足什麼條件可以不用initramfs而直接掛載/?
※ELF文件裡面section的虛擬地址是如何在鏈接(link)時確定的?