linux的初步移植記錄
1. kernel源碼下載
借用國內代理下載linux源碼,版本選擇linux-3.19.1
https://mirror.tuna.tsinghua.edu.cn/kernel/v3.x/linux-3.19.1.tar.xz
解壓:
xz -d linux-3.19.1.tar.xz
tar -xvf linux-3.19.1.tar
2. 交叉編譯工具鏈
工具鏈版本:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf
3. 編譯內核
3.1 導出環境變量
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf- # 編譯工具路徑已導出在PATH中
3.2 編譯及配置
3.2.1 配置
查看現有配置文件:ls arch/arm/configs
查看發現沒有與am335x_beaglebone_black
開發板相關的配置文件,因此從TI的sdk中拷貝出與beaglebone_black
相關的配置文件。
SDK地址:https://github.com/beagleboard/kernel/tree/3.8
下載該項目中的configs/beaglebone
,重命名爲am335x_bbb_defconfig
放置在arch/arm/configs
目錄下
執行配置:
make am335x_bbb_defconfig
make menuconfig
3.2.2 編譯內核
make LOADADDR=0x82000000 uImage -j4
3.2.3 編譯設備樹
make am335x-boneblack.dtb
3.2.4 運行
拷貝image和dtb至tftp目錄
sudo cp arch/arm/boot/uImage /var/lib/tftpboot
sudo cp arch/arm/boot/dts/am335x-boneblack.dtb /var/lib/tftpboot
tftp下載uImage和dtb:
運行kernel:bootm 82000000 - 83000000
啓動kernel成功,如下:
因未製作根文件系統,因此Kernel啓動後在嘗試掛載根文件系統時會失敗,下一節說明如何製作根文件系統並掛載
4. 根文件系統
說明:使用busybox製作最簡單的根文件系統,開發板通過nfs掛載根文件系統(nfs相關設置自行百度查看,共享目錄設置爲$HOME/nfs/rootfs),需要注意的是,如使用ubunt18.04及以上版本的主機,在進行nfs相關設置的時候需要開啓支持nfs2,因爲uboot默認使用nfs2版本進行掛載。
4.1 下載busybox
下載busybox:wget http://www.busybox.net/downloads/busybox-1.25.1.tar.bz2
解壓:tar -jxvf busybox-1.25.1.tar.bz2
4.2 配置及編譯
export CROSS_COMPILE=arm-linux-gnueabihf-
cd busybox-1.25.1
make defconfig
make menuconfig # 在menuconfig中選中 `Build BusyBox as a static binary (no shared libs)`
make install
4.3 構建根文件系統
mkdir $HOME/nfs/rootfs # 創建根文件系統的目錄
cp busybox1.25.1/_install/* $HOME/nfs/rootfs/ -r # 拷貝busybox命令
cd $HOME/nfs/rootfs # 進入該目錄
mkdir dev mnt proc var tmp sys root lib opt # 創建常用目錄
sudo cp /opt/arm/gcc-linaro/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib/* lib/ -r
sudo mknod dev/tty1 c 4 1 # 創建tty設備
sudo mknod dev/tty2 c 4 2
sudo mknod dev/tty3 c 4 3
sudo mknod dev/tty4 c 4 4
cp busybox1.25.1/examples/bootfloppy/etc/* etc/ -r # 拷貝最簡單的init相關的文件到etc目錄
5. 修改uboot的啓動參數
開發主機ip:172.15.10.151
開發板ip:172.15.10.201
網關:172.15.10.1
子網掩碼:255.255.255.0
kernel鏡像:uImage
fdt鏡像:am335x-boneblack.dtb
kernel加載地址:0x82000000
fdt加載地址:0x83000000
nfs目錄:/home/cenyue/nfs/rootfs
修改uboot啓動相關的環境變量
U-boot# set ipaddr 172.15.10.201
U-boot# set serverip 172.15.10.151
U-boot# set gatewayip 172.15.10.1
U-boot# set netmask 255.255.255.0
U-boot# set loadaddr 0x82000000
U-boot# set bootfile uImage
U-boot# set fdtaddr 0x83000000
U-boot# set fdtfile am335x-boneblack.dtb
U-boot# set rootpath /home/cenyue/nfs/rootfs
U-boot# set netargs 'setenv bootargs console=${console} ${optargs} root=/dev/nfs nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}::eth0:off init=/linuxrc rootfstype=nfs rootwait=1'
U-boot# set netboot 'echo Booting from network ...; tftp ${loadaddr} ${bootfile}; tftp ${fdtaddr} ${fdtfile}; run netargs; bootm ${loadaddr} - ${fdtaddr}'
U-boot# set bootcmd 'run netboot'
U-boot# saveenv
U-boot# boot
登錄成功: