busybox檔案系統與簡單驅動學習(0)-u-boot核心編譯篇
一、交叉編譯環境搭建
1、4412交叉編譯工具安裝
(1)該工具位於4412提供安裝包路徑:iTOP-4412精英版光碟資料\02_編譯器以及燒寫工具\arm交叉編譯器
(2)在ubuntu下建立交叉編譯路徑: /usr/local/arm 下,將arm-2009q3.tar.bz2檔案匯入,並進行解壓
(3)進入 root 許可權
(4)進入 /root 路徑,編輯 .bashrc檔案,並匯入交叉編譯路徑
cd /root
gedit .bashrc
新增路徑
export PATH=$PATH:/usr/local/arm/arm-2009q3/bin
繼續執行
source .bashrc
(5)驗證交叉編譯工具是否安裝正確
arm-none-linux-gnueabi-gcc -v
如果出現問題
bash: ./arm-none-linux-gnueabi-gcc: No such file or directory
解決方法:
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
在ubuntu18.04下解決:
sudo apt-get install lib32z1 lib32ncurses5 ncurses-dev
然後繼續驗證,驗證成功後,可以寫一個簡單的helloworld程式來進一步進行測試。
二、u-boot核心編譯
u-boot核心編譯篇4412的開發手冊講解的非常詳細,這邊就不在詳細講述。需要注意的是一定根據自己的板子型號來選擇配置環境,我的板子是POP,需要選擇正確,至於自己移植u-boot和核心這個目前水平還不夠(呃呃呃,尷尬,努力),先暫時使用4412提供的編譯指令碼。
編譯成功後 u-boot生成名字為 u-boot-iTOP-4412.bin
核心名字為 zImage ,位於 */arch/arm/boot/目錄下
編譯過程中可能存在各種問題,當然沒有問題最好,編譯過程中開始可以編譯核心成功,但是第二天突然核心就不能編譯成功了,奇怪了,鬱悶了,沒辦法,還是得繼續編譯啊,網上繼續查詢解決方法。
錯誤:
<command-line>:0: warning: missing terminating " character
drivers/media/video/samsung/mali_ics/common/mali_kernel_core.c: In function 'mali_kernel_constructor':
drivers/media/video/samsung/mali_ics/common/mali_kernel_core.c:172: error: missing terminating " character
drivers/media/video/samsung/mali_ics/common/mali_kernel_core.c:172: error: expected expression before ')' token
make[5]: *** [drivers/media/video/samsung/mali_ics/common/mali_kernel_core.o] Error 1
make[4]: *** [drivers/media/video/samsung/mali_ics] Error 2
make[3]: *** [drivers/media/video/samsung] Error 2
make[2]: *** [drivers/media/video] Error 2
make[1]: *** [drivers/media] Error 2
make: *** [drivers] Error 2
解決方法:將…/mali_ics下的Makefile和Makefile.common中的-qv exported 改為:-Eqv “exported|Unversioned directory”
參考:https://blog.csdn.net/jgzsygg/article/details/77365706
錯誤:
root@nyw:/home/nyw/iTOP4412/iTop4412_Kernel_3.0# make menuconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
解決:
apt-get install ncurses-dev
三、板子燒寫
這裡對燒寫做簡單介紹,作為筆記,詳細仍然直接看文件,不在贅述。
1、Windows燒寫
第一步需要進入u-boot模式然後進行分割槽,分割槽步驟第一次做了就可以了,後期不需要每次都做,接著進入fastboot模式
fdisk -c 0
fatformat mmc 0:1
ext3format mmc 0:2
ext3format mmc 0:3
ext3format mmc 0:4
fastboot
在提供的cmd燒寫u-boot、核心與檔案系統的燒寫
fastboot.exe flash bootloader u-boot-iTOP-4412.bin
fastboot.exe flash kernel zImage
fastboot.exe flash ramdisk ramdisk-uboot.img
fastboot.exe flash system system.img
fastboot -w
fastboot reboot
2、使用Ubuntu進行燒寫
sudo apt-get update
sudo apt-get install android-tools-adb android-tools-fastboot
(2 安裝minicom
既然要使用Ubuntu燒寫,那麼就完全脫離Windows吧,將串列埠也在Ubuntu下控制
sudo apt-get install minicom
(2)配置USB裝置
1)在minicom串列埠中重啟進入uboot模式,然後輸入fastboot進入fastboot模式
2)接著
lsusb
可以看到手機ID資訊
Bus 003 Device 005: ID 18d1:d00d Google Inc.
3)
sudo gedit /etc/udev/rules.d/70-persistent-net.rules
新增:
//adb and fastboot protocol
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0666", OWNER="<tom>"
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0666", OWNER="<tom>"
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0666", OWNER="<tom>"
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d00d", MODE="0666", OWNER="<tom>"
其中,idVendor對應lsusb檢視到的手機ID資訊中的ID冒號前面的部分,idPorduct對應冒號後面的部分。
4)更新系統
cd /etc/udev/rules.d
sudo chmod a+x 70-persistent-net.rules
sudo udevadm control --reload-rules
(3)燒寫指令
fastboot flash bootloader u-boot-iTOP-4412.bin
fastboot flash kernel zImage
fastboot flash ramdisk ramdisk-uboot.img
fastboot flash system system.img
fastboot -w
fastboot reboot
第一步,就暫時到這了,其實剛接觸這塊,也是自己摸索中學習,同時將這一過程記錄下來作為自己得工作筆記,繼續鼓勵自己繼續做下去。加油—————————————————-NYW