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

 

 

三、编译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)

 

成功后如下图:

 

转载于:https://www.cnblogs.com/Lioker/p/10661671.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/aa508508/article/details/102419142

智能推荐

Openmesh函数库设计及与CGAL的对比_openmesh和cgal-程序员宅基地

文章浏览阅读4.7k次。Openmesh函数库设计及与CGAL的对比在前面写了CGAL模板类设计的一些思路,这里尝试写一点openmesh库的设计思路以及和CGAL的对比.虽然OPENMESH代码量小,不过还是只看懂皮毛,很大部分算是翻译帮助文档吧,主要用作笔记,方便以后继续分析。相对CGAL的功能强大和庞大(包含大量计算几何算法的实现),Openmesh显得更加小巧轻量化,它更专_openmesh和cgal

常用验证函数-程序员宅基地

文章浏览阅读1.1k次。//函数名:chksafe//功能介绍:检查是否含有"",//,"/"//参数说明:要检查的字符串//返回值:0:是 1:不是function chksafe(a){ return 1;/* fibdn = new Array ("" ,"//", "、", ",", ";", "/"); i=fibdn.length; j=a.length; for (ii=0;ii { for (

关于C语言编译的可执行文件 exe 发给好友解决办法 Visual Studio 2013 版本_将c语言可执行程序发给别人-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏14次。下面展示一些 内联代码片。前提是用的 Visual Studio 工具你是不是把 exe 可执行文件发给好友之后,好友打开是这种情况?下面展示一些 内联代码片。就解决办法:然后_将c语言可执行程序发给别人

mysql运行报错64bit_关于MySQL5.6.25在Win7 64bit下重装后无法启动的解决方法-程序员宅基地

文章浏览阅读340次。在重装MySQL5.6.25安装到进行配置的时候,一直在等待服务的启动。如果手动在系统服务启动会提示1067错误,这个错误在网上很常见,然而我试过了很多方法均无法解决。于是看ProgramData\MySQL Server 5.6\data下的 ***.err 错误日志,看出错的部分:2015-06-04 13:08:19 5200 [Warning] InnoDB: Doublewrite do..._windows [error] innodb: header page consists of zero bytes in datafile: .\ib

小李跟同桌说,他发现了一个免费学Python的地方,非广告 | Python技能树测评-程序员宅基地

文章浏览阅读1.9w次,点赞2次,收藏2次。Python 技能树,真免费学 Python

UOJ449 集训队作业2018 喂鸽子_uoj449 喂鸽子-程序员宅基地

文章浏览阅读671次。ProblemUOJ看题后:boshi:这是一道简单题队长:这题好像不难,感觉和猎人杀有点像我:Solution感觉自己越来越菜了,再这样下去,要是正式考试送温暖岂不是连温暖都拿不到了。。一脸min-max反演的样子,由于每个鸽子都等价,枚举子集大小 iii 即可ans=∑i=1n(ni)(−1)i+1nif(i)ans=\sum_{i=1}^n\binom n i(-1)..._uoj449 喂鸽子

随便推点

IDEA连接Mysql失败:下载驱动失败,Failed todownload Cannot download Read timed out_idea com.mysql:mysql-connector下载卡住-程序员宅基地

文章浏览阅读482次,点赞7次,收藏8次。解决:1. 手动加入jar包2.选择自己maven仓库中存在mysql-connector3. 选择完毕后,确定使用:4. 进行测试连接_idea com.mysql:mysql-connector下载卡住

Java连接Redis存取数据(详细)_redis导入导出数据java-程序员宅基地

文章浏览阅读6.5k次,点赞4次,收藏30次。Java连接Redis存取数据一.相关工具二.准备工作1.启动redis2.外部连接测试3.新建连接。4.连接成功三.新建jedis项目1.新建项目2.命名项目3.引入相关jar包4.引入 junit5.新建包com.redis.test四.编写代码1.redis.properties : redis连接配置文件2.RedisPoolUtil : 连接池配置工具3.SerializeUtil : ..._redis导入导出数据java

android dialog自定义布局 圆角背景 点击空白处不关闭 设置dialog大小-程序员宅基地

文章浏览阅读748次。1.首先上布局文件&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;LinearLayout ="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="300d

【算法】从记忆化搜索到递推——动态规划入门_记忆化搜索和递推-程序员宅基地

文章浏览阅读311次。本文的题目其实都比较简单,但是为了学习记忆化搜索,还是要用记忆化搜索再做一遍,不要眼高手低。由于 dp 数组的无后效性,因此还可以将 dp 数组优化成两个变量。将大问题分解成子问题,即 dfs (i) 可以分解成 dfs (i - 1)对于简单的 dp 题,直接写 dp 还更简单一些,硬写记忆化搜索还有点难。因为——有些动态规划直接去想递推公式太难了,所以可以先写成记忆化搜索。由于记忆化搜索是从将大问题分解成子问题的角度去考虑的,所以会简单一些。如果读者觉得本文的题目太简单了,可以去尝试一下。_记忆化搜索和递推

2021-07-12嵌入式学习---交叉编译_交叉编译 prefix-程序员宅基地

文章浏览阅读336次。1、交叉编译交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例:我们在Ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行的,不是在Ubuntu Linux上面运行。2、为什么要交叉编译1.有时是因为目的平台(C51)上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;2.有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;3.有时又是因为目的_交叉编译 prefix

使用java Future模式异步调用详细实例展示-程序员宅基地

文章浏览阅读821次。java Future模式想必大家都比较熟悉,大体实现起来也比较简单,因为模式单一,我先介绍一下一般步骤,再讲一下,目前项目中遇到具体问题的解决方式 一般来说,使用java Future模式实现多线程,具体步骤如下, 1.新建一个异步任务类,如 xxxTask 实现 Callable&lt;xxxTask.Result&gt;(或者Runnable&lt;xxx&gt;...

推荐文章

热门文章

相关标签