开发环境:

单板: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、内核和挂接网络文件系统的更多相关文章

  1. u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统

    http://www.linuxidc.com/Linux/2012-09/70510.htm  来源:Linux社区  作者:赵春江 uboot最主要的功能就是能够引导内核启动.本文就介绍如何实现该 ...

  2. 基于tiny4412的Linux内核移植 -- DM9621NP网卡驱动移植(四)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  3. 基于tiny4412的Linux内核移植 -- 设备树的展开

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  4. 基于tiny4412的Linux内核移植 -- 设备树的展开【转】

    转自:https://www.cnblogs.com/pengdonglin137/p/5248114.html#_lab2_3_1 阅读目录(Content) 作者信息 平台简介 摘要 正文 一.根 ...

  5. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  6. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  7. 基于tiny4412的Linux内核移植 -- PWM子系统学习(八)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  8. 基于tiny4412的Linux内核移植 -- PWM子系统学习(七)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  9. 基于tiny4412的Linux内核移植 -- eMMC驱动移植(六)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

随机推荐

  1. Sys.WebForms.PageRequestManagerParserErrorException: 常见的原因是:通过调用Response.Write()修改相应时,将启用响应筛选器、HttpModules或服务器追踪

    Sys.WebForms.PageRequestManagerParserErrorException: 无法分析从服务器收到的消息,之所以出现此错误,常见的原因是:通过调用Response.Writ ...

  2. Google官方教程之Selling In-app Products

    1.原文链接[需FQ]:http://developer.android.com/training/in-app-billing/index.html 2.平时对于英文文档都是大概读一下,现在翻译文章 ...

  3. Redis 集群缓存测试要点--关于 线上 token 失效 BUG 的总结

    在测试账户系统过程中遇到了线上大面积用户登录态失效的严重问题,事后对于其原因及测试盲点做了一些总结记录以便以后查阅,总结分为以下7点,其中原理性的解释有些摘自网络. 1.账户系统token失效问题复盘 ...

  4. 乘风破浪:LeetCode真题_007_Reverse Integer

    乘风破浪:LeetCode真题_007_Reverse Integer 一.前言 这是一个比较简单的问题了,将整数翻转,主要考察了取整和取余,以及灵活地使用long型变量防止越界的问题. 二.Reve ...

  5. Linux常用基本命令大全

    1 一般情况下,自己安装linux系统都会选择简易版,这里面少很多命令,所以需要安装其他的包        yum install openssh-clients   安装scp的软件包 2 把当前一 ...

  6. metasploit渗透测试笔记(内网渗透篇)

    x01 reverse the shell File 通常做法是使用msfpayload生成一个backdoor.exe然后上传到目标机器执行.本地监听即可获得meterpreter shell. r ...

  7. 020.1.1 collections集合工具类

    内容:常见需求以及使用—逆转比较器顺序,最值和同步方法 collections类的方法都是静态方法 强行逆转比较器的顺序例子: //##主函数.java List<String> list ...

  8. python接口测试:自动保存cookies

    接口测试中遇到上一个请求返回响应包含cookie(如下图登录请求的响应结果).需将cookies保存下来,后续请求自动带入,否则会提示未登录. python requests的cookie类型是< ...

  9. css3实现 鼠标经过li时动态画边框(jq库导航)

    <!doctype html> <html> <head> <meta charset="utf-8" /> <meta na ...

  10. 【[CQOI2018]交错序列】

    这个题简直有毒,\(O((a+b)^3logn)\)的做法不卡常只比\(O(2^n*n)\)多\(10\)分 看到\(a\)和\(b\)简直小的可怜,于是可以往矩阵上联想 发现这个柿子有些特殊,好像可 ...