前言
昨天終於入手了一塊Cubieboard2板子,今年4月入職從事的就是與之相關的工作,因此趁現在有時間就好好熟悉一下。
一、主機環境
1.PC主機WIN 7旗艦版
1.虛擬機VM7.0
2.ubuntu12.04
3.4G的TF卡,讀卡器
二、安裝交叉編譯器
這個比較關鍵,試過用自己下載的arm-linux-gnueabihf的4.7版本在構建busybox的根文件系統時會出現經典的錯誤:kernel panic - not syncing: No init found. Try passing init= option to kernel,因此用ubuntu源里自帶的交叉編譯器,安裝方法如下:
#sudo apt-get install gcc-arm-linux-gnueabihf
目前我安裝到的版本是4.6.3。
三、TF卡分區
將TF卡用讀卡器插入PC,ubuntu會識別為sdb(根據具體情況或許會不同),查看原來的TF是否已經有分區:
#sudo fdisk /dev/sdb -l
如果有則將所有分區刪除:
#sudo fdisk /dev/sdb
d
分區號
d
分區號
…
直到刪除所有分區(p可以查看),接下來分區,繼續操作
n
p
1
2048
+100M
n
p
2
回車
回車
w
用命令sudo fdisk /dev/sdb –l查看是否有兩個分區。格式化這兩個分區:
#sudo mkfs.ext4 /dev/sdb2
#sudo mkfs.vfat /dev/sdb1
四、編譯u-boot
下載u-boot源碼:
#git clone https://github.com/linux-sunxi/u-boot-sunxi -b wip/a20
編譯:
#make cubieboard2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
燒寫u-boot到TF卡:
#dd if=spl/sunxi-spl.bin of=/dev/sdb bs=1024 seek=8
#dd if=u-boot.bin of=/dev/sdb bs=1024 seek=32
五、編譯內核
下載內核源碼:
#git clone https://github.com/cubieboard2/linux-sunxi
修改內核源碼根目錄下的Makefile,令ARCH=arm,CROSS_COMPILE=arm-linux-gnueabihf-。
配置、編譯內核:
#make sun7i_defconfig
#make menuconfig(注:退出時要保存)
#make uImage
六、構建script.bin腳本
下載源碼:
#git clone https://github.com/linux-sunxi/sunxi-boards
#git clone https://github.com/linux-sunxi/sunxi-tools
編譯:
#cd sunxi-tools
#make
#./fex2bin ../sunxi-boards/sys_config/a20/cubieboard2.fex ./script.bin
七、構建boot.scr文件
新建boot.cmd文件,輸入以下內容:
setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 init=/sbin/init rootwait
panic=10 ${extra}
fatload mmc 0 0x43000000 script.bin
fatload mmc 0 0x48000000 uImage
bootm 0x48000000
編譯:
#mkimage -C none -A arm -T script -d boot.cmd boot.scr
八、構建busybox根文件系統
下載busybox源碼,http://busybox.net,我下載的是當時最新版本busybox-1.22.1。
修改源碼根目錄下的Makefile,令ARCH=arm,CROSS_COMPILE=arm-linux-gnueabihf-。
編譯、安裝:
#make
#make install
目前為止,需要的所有文件已經准備好了。下面將它們放到合適的TF卡分區里。首先將uImage、boot.cmd、boot.scr和script.bin文件放到sdb1分區。掛載TF卡分區到ubuntu:
#sudo mount /dev/sdb1 /mnt/mnt1
拷貝文件進mnt1(自己創建mnt1、mnt2目錄):
#sudo cp {內核源碼路徑}/arch/arm/boot/uImage /mnt/mnt1
#sudo cp {sunxi-tools路徑}/script.bin /mnt/mnt1
#sudo cp boot.cmd /mnt/mnt1
#sudo cp boot.scr /mnt/mnt1
#sudo umount /mnt/mnt1
制作根文件系統,將busybox生成的文件放到sdb2分區:
#sudo mount /dev/sdb2 /mnt/mnt2
#sudo cp –Rv {busybox源碼路徑/_install/*} /mnt/mnt2
#sudo cp –Rv {busybox源碼路徑/ examples/bootfloppy/etc} /mnt/mnt2
拷貝交叉編譯器的庫到sdb2分區:
#sudo cp –Rv /usr/arm-linux-gnueabihf/lib /mnt/mnt2
進入/mnt/mnt2目錄:
#cd /mnt/mnt2
創建目錄:
#sudo mkdir dev proc sys var home tmp mnt run boot boot2 dev/pts
將/mnt/mnt2/etc/fstab文件的內容全部替換為以下內容:
proc /proc proc nosuid,noexec,nodev 0 0
sysfs /sys sysfs nosuid,noexec,nodev 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
tmpfs /tmp tmpfs defaults 0 0
devtmpfs /dev devtmpfs mode=0755,nosuid 0 0
/dev/mmcblk0p1 /boot2 vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
最后卸載sdb2分區:
#sudo umount /mnt/mnt2
將TF卡插入到cubieboard2,接上自帶的USB轉TTL線,成功啟動如下:
若有什么問題,歡迎交流。