TINY4412:移植uboot、內核和掛接網絡文件系統
開發環境:
單板:TINY4412-1611
系統:Ubuntu 16.04 64位
編譯工具鏈:arm-linux-gcc-4.3.2
uboot版本:uboot_tiny4412-20130729
內核版本:linux-3.5-20170221
busybox版本:busybox-1.20.0
【註】本文只用於移植,不會講解其中原理。若讀者希望了解其中原理,請閱讀《嵌入式linux應用開發完全手冊》。
一、下載源碼和必需文件
百度網盤鏈接(提供了友善之臂光盤的文件系統,但是本博客使用的是網絡文件系統):
https://pan.baidu.com/s/1lYkkP2eT5qxjYbxJ7-jLvw
提取碼為:g6yy
二、安裝arm-linux-gcc-4.3.2
解壓arm-linux-gcc-4.3.2到/usr/local/目錄:
$ sudo tar xjf arm-linux-gcc-4.3.2.tar.bz2 -C /
設置環境變量,在/etc/environment文件中添加:/usr/local/arm/4.3.2/bin,更改完成後如下圖:
$ sudo vim /etc/environment
$ sudo source /etc/environment
查看是否安裝成功:
$ arm-linux-gcc -v
三、編譯uboot_tiny4412-20130729
將百度網盤中文件夾下的所有文件放在某一目錄(筆者目錄為/work/tiny4412/tools/),解壓uboot並打補丁:
$ tar xzf uboot_tiny4412-20130729.tgz
$ cd uboot_tiny4412/
$ patch -p1 < ../tiny4412_lioker.patch
完成後如下圖:
編譯:
$ make tiny4412_config
$ make
完成後會在當前目錄下生成u-boot.bin
四、編譯linux-3.5-20170221
解壓linux-3.5:
$ cd ../
$ tar xzf linux-3.5-20170221.tgz
$ cd linux-3.5/
配置:
$ sudo cp ../uboot_tiny4412/tools/mkimage /usr/bin/mkimage
$ sudo chmod 777 /usr/bin/mkimage
$ cp tiny4412_linux_defconfig .config
$ make menuconfig
【註】如果make menuconfig時報錯,如make[1]: *** [menuconfig] Segmentation fault (core dumped),那麽需要執行sudo apt-get install libncurses*
成功後如下圖,我們可以通過方向鍵控制,按空格鍵選中或取消選中(也就是[*]或[ ]),按回車進入下一級
我們需要在此基礎上進行修改,打開以下選項:
Kernel hacking --->
[*] Kernel low-level debugging functions (read help!)
Kernel low-level debugging port (Use S3C UART 0 for low-level debug)
(X) Use S3C UART 0 for low-level debug
保存後退出
修改kernel/timeconst.pl文件,否則編譯過程會出現如下錯誤:
修改kernel/timeconst.pl文件373行如下圖所示:
編譯:
$ make -j4
完成後會在arch/arm/boot目錄中生成我們需要的zImage文件
五、編譯busybox-1.20.0,創建文件系統
配置busybox-1.20.0:
$ cd ../
$ tar -xvf busybox-1.20.0.tar.bz2
$ cd busybox-1.20.0/
$ make defconfig
$ make menuconfig
打開以下選項,設置如下圖所示:
BusyboxSettings --->
Build Options --->
保存後退出
編譯:
$ make -j4
$ make install
完成後會在busybox-1.20.0目錄下生成_install目錄
制作文件系統:
$ cd /work/tiny4412/
$ mkdir fs
$ cd fs/
$ mkdir etc dev opt sys tmp mnt lib proc
$ mkdir etc/init.d
$ mkdir dev/pts
$ vim etc/init.d/rcS
添加:
mount -a mkdir /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s
保存後退出,完成後如下圖:
$ vim etc/inittab
添加:
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
保存後退出,完成後如下圖:
$ vim etc/profile
添加:
export PS1="[root @ lioker \W ] #"
保存後退出,完成後如下圖:
$ vim etc/fstab
添加:
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
保存後退出,完成後如下圖:
創建命令行設備和空設備:
$ sudo mknod dev/console c 5 1
$ sudo mknod dev/null c 1 3
構造lib:
$ cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/* ./lib -r
設置權限並允許掛接:
$ cd ../
$ chmod 777 fs -R
$ sudo vim /etc/exports
添加:
/work/tiny4412/fs *(rw,sync,no_root_squash)
保存後退出,完成後如下圖:
重啟nfs服務並測試是否可以掛接:
$ sudo /etc/init.d/nfs-kernel-server restart
$ sudo mount -t nfs 127.0.0.1:/work/tiny4412/fs /mnt
完成後如下圖:
取消掛接:
$ sudo umount /mnt
TINY4412:移植uboot、內核和掛接網絡文件系統