前言
我想做屬于自己的視覺相關(guān)產(chǎn)品蚓让,從底層驅(qū)動到應(yīng)用層系統(tǒng)開發(fā)再到優(yōu)化及算法。而我當前從資源充分利用的角度來說睦柴,我買過開發(fā)板邦危,并且本人的工作經(jīng)驗更傾向于驅(qū)動及中間件開發(fā)洋侨,所以從底層驅(qū)動這個點開始進階會比較適合。
底層從定制uboot到Kernel啟動及調(diào)試環(huán)境搭建铡俐,邊復(fù)習(xí)邊實踐
1凰兑,第一步找出了我家了USB攝像頭,既然攝像頭是USB的审丘,所以去下載個新的kernel移植下吏够,并且要能識別usb。
Kernel5.4移植解決usb host設(shè)備無法識別問題--Apple的學(xué)習(xí)筆記
2滩报,Kernel能自制锅知,文件系統(tǒng)從來沒有自制過,那么學(xué)習(xí)下buildroot進行了文件系統(tǒng)制作脓钾。
Buildroot自制文件系統(tǒng)sd卡啟動成功--Apple的學(xué)習(xí)筆記
3售睹,文件系統(tǒng)涉及到常用文件格式,深入學(xué)習(xí)下
winhex解析FAT32存儲格式理解MBR--Apple的學(xué)習(xí)筆記
4可训,學(xué)習(xí)最好是有重點的昌妹,Linux驅(qū)動開發(fā)找就學(xué)習(xí)過捶枢,本次的重點目標就定義為memory,因為視覺相關(guān)的產(chǎn)品除了和網(wǎng)絡(luò)傳輸有關(guān)還和存儲及內(nèi)存有關(guān)飞崖。
理論復(fù)習(xí):MMU技術(shù)--Apple的學(xué)習(xí)筆記
5烂叔,uboot定制的前提是復(fù)習(xí)下uboot相關(guān)內(nèi)容
ARMv8,v7內(nèi)核基礎(chǔ)--Apple的學(xué)習(xí)筆記
6,移植最新uboot固歪,復(fù)習(xí)流程
移植uboot[2020.10.r4]--Apple的學(xué)習(xí)筆記
7蒜鸡,簡單定制uboot,打造自己的產(chǎn)品
uboot定制--Apple的學(xué)習(xí)筆記
8牢裳,基礎(chǔ)復(fù)習(xí)
lds連接文件基礎(chǔ)復(fù)習(xí)逢防,因為和memory布局相關(guān)
lds鏈接文件--Apple的學(xué)習(xí)筆記
Makefile復(fù)習(xí)--Apple的學(xué)習(xí)筆記
9,sd卡協(xié)議深入
SD卡物理層協(xié)議--Apple的學(xué)習(xí)筆記
10蒲讯,從uboot過度到kernel忘朝,學(xué)習(xí)kernel啟動流程
Linux kernel啟動流程--Apple的學(xué)習(xí)筆記
11,學(xué)習(xí)了kernel和uboot的啟動判帮,那么做個小應(yīng)用辜伟,讓uboot支持雙系統(tǒng)啟動。
定制uboot支持雙系統(tǒng)啟動--Apple的學(xué)習(xí)筆記
12脊另,正式進入kernel的學(xué)習(xí)和復(fù)習(xí)
基礎(chǔ)學(xué)習(xí):kernel內(nèi)存分配函數(shù)--Apple的學(xué)習(xí)筆記
設(shè)備驅(qū)動模型學(xué)習(xí):Kobject和Kset及設(shè)備驅(qū)動模型--Apple的學(xué)習(xí)筆記
13,工欲善其事必先利其器
為了之后可以高效的更新代碼约巷,還是需要搭建NFS掛載系統(tǒng)和TFTP下載zImage的功能偎痛。
uboot支持NFS及TFTP啟動內(nèi)核及文件系統(tǒng)--Apple的學(xué)習(xí)筆記
14,在buildroot中創(chuàng)建開發(fā)環(huán)境
之前buildroot我只是用來創(chuàng)建文件系統(tǒng)独郎,編譯的是buildroot自帶的4.19〔嚷螅現(xiàn)在再學(xué)習(xí)了下buildroot后,我更改為了5.4版本內(nèi)核氓癌。但是編譯器使用的依然是內(nèi)置的uclib谓谦。主要是看到buildroot可以容易的添加lib庫,比如openssh贪婉。
buildroot內(nèi)核定制環(huán)境創(chuàng)建--Apple的學(xué)習(xí)筆記
15反粥,先做一個驅(qū)動,小試牛刀疲迂,應(yīng)該說先配置一個usb gadget虛擬u盤的驅(qū)動
主要使用打印當時調(diào)試
解決usb虛擬u盤無法probe驅(qū)動的問題--Apple的學(xué)習(xí)筆記
上面是編譯到內(nèi)核才顿,下面做一個全模塊加載的
解決Kconfig tristate導(dǎo)致模塊加載usb gadget問題--Apple的學(xué)習(xí)筆記
16,單步調(diào)試和遠程調(diào)試
為了將來更加高效尤蒿,所以單步調(diào)試和通過ssh及遠程gdb還是需要的郑气,并且若是用戶態(tài)開發(fā)可以用ccs9或vscode單步調(diào)試,目標就是越來越高效腰池,所以進行了相關(guān)庫的交叉編譯及使用尾组。
busybox制作及移植ssh和gdb支持ccs9調(diào)試--Apple的學(xué)習(xí)筆記
17.內(nèi)核調(diào)試
雖然ftrace等都可以調(diào)試內(nèi)核忙芒,但是是基于打印的,我就是想要再高效些讳侨。在沒有仿真器的情況下呵萨,相對高效的就是kgdb還是qemu模擬調(diào)試內(nèi)核了。結(jié)果環(huán)境搭建成功爷耀,網(wǎng)上還看到了一個eclipse來配合qemu調(diào)試的甘桑,之后嘗試下。
qemu調(diào)試arm內(nèi)核--Apple的學(xué)習(xí)筆記
至此一切準備工作完成歹叮,可以正式進入驅(qū)動開發(fā)了