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 要移植的内核版本 ...
随机推荐
- java正则表达式校验移动电话、固话、邮编的校验
package com.tmall.epp.web.module.util; import java.util.regex.Pattern; /** * 移动电话.固话.邮编的校验 * @since ...
- switch结构可以更好的解决等值判断问题
switch 选择结构的语法:switch (表达式){case 常量 1://代码块1:break;case 常量 2://代码块2:break;......default://代码块n:break ...
- 关于动态门户WEB博雅互动的源代码(HTML+CSS+javascript)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 沉淀,再出发:python爬虫的再次思考
沉淀,再出发:python爬虫的再次思考 一.前言 之前笔者就写过python爬虫的相关文档,不过当时因为知识所限,理解和掌握的东西都非常的少,并且使用更多的是python2.x的版本的功能,现 ...
- Asp.Net MVC Identity 2.2.1 使用技巧(三)
使用用户管理器之用户注册 用户管理的基本功能模块中已经做好了,我们现在做一些调整. 1.修改用户名注册规则. 上一篇中可选操作已经详解了这里把基本的设置简介下. 打开App_Start/identit ...
- 【深入理解JAVA虚拟机】读后感
收获颇多的一本书,非常值得细细品味. 1.所谓万变不离其宗,此书便是宗.读过此书后,发现以前看过的网上好多五花八门的文章,都是源自此书. 2.举一反三.此书中讲到的jvm用到的各种思想,在工作中其实经 ...
- linux 下 eclipse 开发环境的搭建
在windows平台下开发习惯了各种ide,不得不承认ide给我们开发带来的便捷.于是希望在linux平台下也希望找到一个合适的ide.这就想起来了eclipse具有跨平台性. 那么就开始搭建环境吧. ...
- The good life is one inspired by love and guided by knowledge
The good life is one inspired by love and guided by knowledge 伯特兰·罗素Bertrand Russell18721970 I can a ...
- Python2.7 - IMOOC - 3
第三章 Python变量和数据类型 3-4.变量 变量名必须是大小写英文.数字和下划线(_)的组合,且不能用数字开头. 同一个变量可以反复赋值,而且可以是不同类型的变量,例如: a = 123 # a ...
- MySQL5.7 不同操作系统下的主从配置
1. 服务器信息 1.1 Ubuntu 17.0.4 (Master服务器) MySQL版本: 5.7.20 主数据库:dslbcp IP: 192.168.12.130 3306 1.2 Wind ...