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 要移植的内核版本 ...
随机推荐
- Python学习---面向对象的学习[基础]
面向对象 面向对象的三大特性是指:封装.继承和多态. 说明: Python可以函数式编程,也可以面向对象编程 l 面向过程:根据业务逻辑从上到下写垒代码 l 函数式 :将某功能代码封装到函数中,日后便 ...
- HTML学习---基础知识学习
1.1. HTML 1.为什么要有HTML? "Hello" "<h1>Hello</h1>" - 浏览器渲染时使用一套HTML规则, ...
- MySQL -Naivacat工具与pymysql模块
Navicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库. 官网下载:https ...
- strncpy()函数【转】
C/C++中的strncpy()函数功能为将第source串的前n个字符拷贝到destination串,原型为: char * strncpy ( char * destination, const ...
- 连续支付的年金(continuously payable annuity)
一.含义 假设连续不断地付款,但每年的付款总量仍然为1元. 二. 连续支付年金是年支付次数m趋于无穷大时的年金,故 连续支付年金与基本年金的关系: 连续支付,每年的支付总量为1,支付期限为无穷: 积累 ...
- Linux基础入门 - 2
第三节 用户及文件权限管理 3-1.Linux用户管理 Linux 是一个可以实现多用户登陆的操作系统,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件.但实际上他们的文件都是 ...
- jQuery中的$.grep()使用
grep()方法用于数组元素过滤筛选 grep(array,callback,invert) array:待过滤数组; callback:处理数组中的每个元素,并过滤元素,该函数中包含两个参数,第一个 ...
- 小白学CMD下运行MySQL
将mysql目录下bin目录中的mysql.exe放到C:\WINDOWS下,可以执行以下命令 连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样) ...
- mac使用指南--软件安装部分
最近因为开发需要,换了个mac,发现和Windows下面的操作和习惯真是千差万别啊,在这里记录一下,有需要的也可以参考一下. 安装前强烈建议根据个人习惯设置好触控板!!!什么单击双击选中拖拽的统统设好 ...
- jq判断鼠标滚轴向上滚动还是向下滚动
$(document).on("mousewheel DOMMouseScroll", function (e) { var delta = (e.originalEvent.wh ...