鑒於自己制作根文件系統太麻煩了,所以想用buildroot管理uboot,kernel,另外還可以自動生產rootfs,於是花了兩天研究了下buildroot的框架和使用,在自己的2440開發板上也跑起來了,故整理成文檔,以便自己將來忘記的時候能參考下:
源碼下載,我下載的是2018.02.3版本,官方下載地址:http://buildroot.org/downloads/
由於我是玩的JZ2440的板子,故我就以這個板子作為藍本說明:
1.cd到buildroot根目錄下。
2.首先查看當前buildroot支持哪些單板:
a.去configs/目錄下直接查看。
b.在根目錄下執行make list-defconfigs。
3. 由於我的板子是比較老的s3c2440的板子,於是只好我自己創建了,執行make menuconfig,一項一項的去設置:
a.Target options:
b.Build options:
暫時保持默認即可。
Toolchain:
Toolchain type --------> External toolchain #因為我使用自己安裝的toolchain
Toolchain --------> Custom toolchain #客戶定制的工具鏈
Toolchain origin --------> Pre-installed toolchain #事先安裝的工具鏈
Toolchain path --------> ****/toolschain/4.4.3/ #填上自己工具鏈的絕對路徑即可,注意這里只是到bin的上一級目錄即可,比如我舉例的,知道4.4.3目錄
Toolchain prefix --------> $(ARCH)-linux #工具鏈的前綴,一般就是arm-linux
External toolchain gcc version --------> 4.4.x #gcc版本,跟實際保持一致即可
External toolchain kernel headers series --------> 4.15.x #不清楚這個是干嘛的,但我選擇跟將使用的kernel版本一致,我的kernel版本是4.15.1,這里后面編譯的時候會報錯,后面再說明。
External toolchain C library --------> glibc/eglibc #似乎一般都是用這個庫
c.System configuration:
System hostname --------> smdk2440 #隨便設置一個名稱,不重要
System banner --------> welcome to smdk2440 #設置一個歡迎詞,當掛在上根文件系統之后就會打印這個字符串
[*]Enable root login with password --------> #開啟密碼,這樣在登錄linux的時候就會出現詢問密碼的界面
Root password --------> #設置一個密碼
d.Kernel:
Kernel version --------> Custom Git repository #我的代碼是在github上,所以我選擇了這個
URL of custom repository --------> #填上github上的地址,這里有點說明,如果是開發階段,肯定不希望每次修改都往girhub上推,那么這里就可以填上自己本地git倉庫的絕對地址。
Custom repository version --------> #填上需要克隆的版本,就是用git log|less看到的那個哈希值,這樣buildroot就會去克隆相應的linux版本,我猜測可以直接寫成master也可以,這樣不需要每次都是人為的修改 版本號,保證每次拉下來的都是最新的,這個還有待確認。
Kernel configuration --------> Using a custom (def)config file #kernel需要一個config文件,這里就是選擇使用defconfig,這樣下一個選擇路徑的選項就會出現
Configuration file path --------> $(TOPDIR)/board/arm/smdk2440/smdk2440_linux_defconfig) #填上自己將使用的config文件,這個路徑是自己創建的,保持buildroot規范
在linux下使用s3c2410_defconfig直接拷貝過來修改名字,如果后期linux的config還需要改動,那么就要將新的拷貝到這個目錄下。
e.Filesystem images:
[*] jffs2 root filesystem --------> #我先使用jffs2吧,使用yaffs2編譯的時候報錯了,我不知道怎么修改。
f.Bootloaders:
跟kernel類似,不再重復介紹。
4. 經過上述操作就會在根目錄下生產一個.config文件,然后make,這樣buildroot就會根據相應的設置去編譯uboot,kernel,以及自動制作rootfs。
經過漫長的下載,編譯,最后生成的文件位於:output/images/下。
5.遇到的問題就是那個linux header跟linux不相符,因為Toolchain-> kernel headers series選的是4.15.x,而我的工具鏈是4.4.3,有一個宏不匹配,暫時不記得了,這篇帖子是寫的第二次了,第一次弄丟了,博客園的草稿箱里也找不到了,真是奇怪。