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 要移植的内核版本 ...
随机推荐
- 动态切换tableView中的cell的种类
动态切换tableView中的cell的种类 为什么要动态切换tableView中cell的种类呢?如果项目经理不出这种需求,你也就见不到这篇文章了:) 效果: 源码: 首先,你要准备3种cell,直 ...
- [tools]notepad++当前文件路径不是工作路径
Time:2015/04/09 描述: 在notepad++中运行lua,工作路径不是当前文件的路径,而是notepad++的安装目录 修改: 把差将中的NppExec --> Follow $ ...
- Java SimpleDateFormat对象的parse方法处理12点变成00点
原文链接:https://blog.csdn.net/chenbetter1996/article/details/82812959 new SimpleDateFormat("格式&quo ...
- Python学习---django模板继承180123
django模板继承 --20180123 a.include 模板标签 b.extend(继承)模板标签 ------include 模板标签 该标签允许在(模板中)包含其它的模板的内容. 标签的 ...
- Linux 下Wordpress博客搭建
Wordpress # 下载安装文件 cd /usr/local/nginx/html/blog wget https://cn.wordpress.org/wordpress-4.8.1-zh_CN ...
- wooyun内网渗透教学分享之内网信息探测和后渗透准备
常规的,从web业务撕开口子url:bit.tcl.comgetshell很简单,phpcms的,一个Phpcms V9 uc api SQL的老洞直接getshell,拿到shell,权限很高,sy ...
- 关于eclipse没有js、xml代码提示的解决:下载一个插件
1)eclipse打开帮助 2)Eclipse Marketplace,然后搜索AngularJS Eclipse 安装后重启就行了 xml的搜索Rinzo. 没有vpn,我的网络到达不了.
- Vim常用命令记录
(本文仅记录了Vim常用的按键功能和操作,用于备忘和查阅.若为Vim小白,建议先通过列出的参考资源获得对Vim更全面的了解.Vi 是几乎所有Linux发行版都支持的文字编辑工具,也是许多Linux下工 ...
- 好用的css库
实现元素各种抖动效果:https://elrumordelaluz.github.io/csshake/
- BZOJ 1192 鬼谷子的钱袋 找规律
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1192 题目大意: 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向 ...