基於am335x_bb_black的linux初步移植

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

登錄成功:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章