1. 程式人生 > >TINY4412:移植uboot、內核和掛接網絡文件系統

TINY4412:移植uboot、內核和掛接網絡文件系統

use uboot 2-2 服務 help bin 內核和 linux應用開發 conf


開發環境:

單板: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、內核和掛接網絡文件系統