1. 程式人生 > >busybox檔案系統與簡單驅動學習(0)-u-boot核心編譯篇

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

4412 u-boot移植

4412核心移植