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
【注】 1、本文只用于移植,不会讲解其中原理。若读者希望了解其中原理,请阅读《嵌入式linux应用开发完全手册》。
2、为了便于区分uboot命令和虚拟机命令,两种命令的背景会采用不同颜色,请读者注意区分。
一、下载源码和必需文件
百度网盘链接(提供了友善之臂光盘的文件系统,但是本博客使用的是网络文件系统):
https://pan.baidu.com/s/1DwW9HItGVViDyavq2fzGhQ
提取码为:n0tj
二、安装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
$ source /etc/environment

查看是否安装成功:
$ arm-linux-gcc -v

若有读者在第二步出错,建议使用韦东山老师提供的虚拟机:http://wiki.100ask.org/Download_link_page
三、编译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*
成功后如下图,我们可以通过方向键控制,按空格键选中或取消选中(也就是[*]或[ ]),按回车进入下一级

我们需要在此基础上进行修改,打开以下选项:
System Type --->
[ ] Support TrustZone-enabled Trusted Execution Environment

取消勾选Support TrustZone-enabled Trusted Execution Environment
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/
$ cp /work/tiny4412/tools/busybox-1.20.0/_install/* . -r
$ 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:
$ sudo cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/* ./lib -r
$ sudo cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/* /work/tiny4412/fs/lib/ -r
设置权限并允许挂接:
$ cd ../
$ sudo 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
六、烧写uboot至eMMC
查看挂载的磁盘设备:
$ ls /dev/sd*
如下图:

需要准备2G到8G的SD卡,并进行格式化
将SD卡插入电脑,SD卡连接虚拟机
执行:
$ ls /dev/sd*

/dev/sdc就是我们的SD卡
继续执行:
$ cd /work/tiny4412/tools/uboot_tiny4412/sd_fuse/
$ make
$ cd ./tiny4412/
$ sudo ./sd_fusing.sh /dev/sdc
将SD卡插入开发板,开发板串口连接电脑,开发板的microUSB连接电脑(不能使用USB分线器),启动后串口正常接收,代表uboot烧写到SD卡完成

按任意键进入uboot命令行,准备格式化eMMC,执行以下命令:
TINY4412 # fdisk -p 0
TINY4412 # fdisk -p 1
确定“disk 1”为eMMC,下一行的命令的“1”指的就是eMMC:
TINY4412 # fdisk -c 1 320 2057 520
TINY4412 # fatformat mmc 1:1
TINY4412 # ext3format mmc 1:2
TINY4412 # ext3format mmc 1:3
TINY4412 # ext3format mmc 1:4
TINY4412 # emmc open 1
TINY4412 # dnw 0x40008000

切换到虚拟机,虚拟机上会显示两个USB图标,一个是串口线(USB UART),一个是传输线,将传输线连接到虚拟机

虚拟机中执行:
$ lsusb
确定ID为04e8:1234的是传输线

虚拟机中安装dnw:
$ tar -xzf dnw-linux.tar.gz
$ cd dnw-linux/
$ cd ./src/driver/
$ vim secbulk.c
修改26行为之前的传输线ID

保存后退出
$ cd ../../
$ make
$ cd ./src/driver/
$ sudo insmod secbulk.ko
$ sudo cp ../dnw/dnw /usr/local/bin/
$ cd /work/tiny4412/tools/uboot_tiny4412/sd_fuse/tiny4412/
$ sudo dnw E4412_N.bl1.bin
此时uboot会提示传送校验完成,此时已经把bl1.bin通过USB传输到了DDR的0x40008000地址
接下来我们烧录bl1.bin到eMMC中,uboot下继续输入:
TINY4412 # mmc write 1 0x40008000 0 0x10
uboot会提示写入信息,说明已经写入成功。以此类推,烧录bl2.bin,u-boot.bin和tzsw.bin
TINY4412 # dnw 0x40008000
$ sudo dnw bl2.bin
TINY4412 # mmc write 1 0x40008000 0x10 0x1C
TINY4412 # dnw 0x40008000
$ sudo dnw ../../u-boot.bin
TINY4412 # mmc write 1 0x40008000 0x30 0x21D
TINY4412 # dnw 0x40008000
$ sudo dnw E4412_tzsw.bin
TINY4412 # mmc write 1 0x40008000 0x2C0 0xB8
启动分区到此全部写入完成,关闭eMMC
TINY4412 # emmc close 1
将开关拨到NAND一侧,使用eMMC启动
七、烧写内核到eMMC,挂载网络文件系统
烧写使用的是fastboot,在虚拟机中执行:
$ sudo apt-get install fastboot
安装完成后在uboot中执行:
TINY4412 # fastboot
虚拟机中传输:
$ sudo fastboot flash kernel /work/tiny4412/tools/linux-3.5/arch/arm/boot/zImage
uboot会提示写入信息,说明已经写入成功
TINY4412 # fastboot
$ sudo fastboot flash ramdisk /work/tiny4412/tools/ramdisk-u.img
如果想使用友善之臂自带的文件系统,执行:
TINY4412 # fastboot
$ sudo fastboot flash fat /work/tiny4412/tools/rootfs_qtopia_qt4.img
在uboot命令行中按“Ctrl + C”退出传输
对于网络文件系统设置uboot启动参数:
TINY4412 # set gatewayip 192.168.7.1
TINY4412 # set ipaddr 192.168.7.9 // 板子的IP
TINY4412 # set serverip 192.168.7.5 // 虚拟机的IP
TINY4412 # set bootargs "root=/dev/nfs nfsroot=192.168.7.5:/work/tiny4412/fs ip=192.168.7.9 console=ttySAC0,115200n8 lcd=S70 ctp=2"
TINY4412 # set bootcmd "movi read kernel 0 40008000; movi read rootfs 0 41000000 400000;bootm 40008000 41000000"
TINY4412 # save
TINY4412 # reset
对于友善之臂自带的文件系统设置uboot启动参数:
TINY4412 # set bootargs "console=ttySAC0,115200n8"
TINY4412 # set bootcmd "movi read kernel 0 40008000;movi read rootfs 0 41000000 400000;bootm 40008000 41000000"
TINY4412 # save
TINY4412 # reset
如果读者不希望内核打印太多信息, 可将bootargs设置为:
bootargs=root=/dev/nfs nfsroot=192.168.7.5:/work/tiny4412/fs ip=192.168.7.9 console=ttySAC0,115200n8 lcd=S70 ctp=2 loglevel=4
或
bootargs=console=ttySAC0,115200n8 loglevel=4
需要注意的是,loglevel后面的数值越小,表示输出级别越高,输出信息越少(最小值为0)
成功后如下图:

TINY4412:移植uboot、内核和挂接网络文件系统的更多相关文章
- u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统
http://www.linuxidc.com/Linux/2012-09/70510.htm 来源:Linux社区 作者:赵春江 uboot最主要的功能就是能够引导内核启动.本文就介绍如何实现该 ...
- 基于tiny4412的Linux内核移植 -- DM9621NP网卡驱动移植(四)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- 设备树的展开
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- 设备树的展开【转】
转自:https://www.cnblogs.com/pengdonglin137/p/5248114.html#_lab2_3_1 阅读目录(Content) 作者信息 平台简介 摘要 正文 一.根 ...
- 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- PWM子系统学习(八)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- PWM子系统学习(七)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- eMMC驱动移植(六)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
随机推荐
- asp.net的HTTP请求处理过程
1.asp.net的HTTP请求处理过程 说明: (1).客户端浏览器向服务器发出一个http请求,此请求会被inetinfo.exe进程截获,然后转交给aspnet_isapi.dll进程,接着它又 ...
- oracle 大表 已有大数据量 建索引防卡 nologging
create index idx_th_user_info_fans_name on th_user_info(fans_name) nologging;
- java接口实例
1.开发系统时,主体架构使用接口,接口构成系统的骨架2.这样就可以通过更换接口的实现类来更换系统的实现 public class printerDemo{ public static void mai ...
- Codeforces Round #441 (Div. 2)【A、B、C、D】
Codeforces Round #441 (Div. 2) codeforces 876 A. Trip For Meal(水题) 题意:R.O.E三点互连,给出任意两点间距离,你在R点,每次只能去 ...
- 面向对象的JavaScript --- 封装
面向对象的JavaScript --- 封装 封装 封装的目的是将信息隐藏.一般而言,我们讨论的封装是封装数据和封装实现.真正的封装为更广义的封装,不仅包括封装数据和封装实现,还包括封装类型和封装变化 ...
- 「NOIP2018 保卫王国」
题目 强制选点我们可以把那个点权搞成\(-inf\),强制不选我们搞成\(inf\),之后就真的成为动态\(dp\)的板子题了 由于不想像板子那样再写一个最大独立集的方程,之后利用最小点覆盖=总点权- ...
- UVA10125 Sumsets
嘟嘟嘟 很简单的折半搜索. 把式子变一下型,得到\(a + b = d - c\). 然后枚举\(a, b\),存到\(map\)里,再枚举\(c, d\)就好了. \(map\)以\(a,b\)两数 ...
- ubuntu ibus 输入法总在左下角不跟随光标的处理
sudo apt-get install ibus-gtk ibus-gtk3 ibus-qt4 参考文章
- 【React】使用 create-react-app 快速构建 React 开发环境
create-react-app 是来自于 Facebook,通过该命令我们无需配置就能快速构建 React 开发环境. create-react-app 自动创建的项目是基于 Webpack + E ...
- mavenWeb工程建立步骤
1.File >> New >>other...,在New窗口中打开Maven,选中Maven Project,Next. 2.在New Maven Project弹出窗口中去 ...