• 硬件平台:tiny4412
  • 系统:linux-3.5-20151029
  • 文件系统:busybox-1.22.1.tar.bz2
  • 编译器: arm-linux-gcc-4.5.1

目的:

使用uboot引导linux系统,并挂接根文件系统,搭建起linux开发环境。


由于友善支臂提供的minitools不是开源,使用起来很不舒服。本文将记录从零使用uboot在tiny4412上搭建linux系统的。由于之前只是学了2440,完成这个流程也遇到各种,现在总结如下。其中参考了多篇博客才得以实现,具体涉及的时候会给出链接。

一、准备系统文件

1、安装交叉编译工具链

(1)解压编译器源码

tar arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz –C / 

(2)执行后将把 arm-linux-gcc 安装到/opt/FriendlyARM/toolschain/4.5.1 目录。

(3)vi /etc/environment修改PATH为:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/FriendlyARM/toolschain/4.5.1/bin"

(4)重启内核,执行arm-linux-gcc -v查看版本。

2、编译内核

(1)解压

解压 Linux  内核源代码

tar xvzf  linux-3.5-20151029.tgz

cd  linux-3.5

(2)配置

cp  tiny4412_linux_defconfig  .config

(3)编译

make

最后在 arch/arm/boot 目录下生成 zImage

3、制作根文件系统

本身打算使用光盘自带的文件系统,结果fastboot下载的时候,文件系统始终出问题,于是采用自制文件系统。通过网络进行挂接,后面会有具体操作说明。

参考:http://blog.csdn.net/morixinguan/article/details/50677105

编译配置安装busybox

下载源码:https://busybox.net/

tar -xvf busybox-1.22.1.tar.bz2

cd busybox-1.22.1

makedefconfig     //默认配置

make menuconfig

BusyboxSettings  --->

[*] Build BusyBoxas a static binary (no shared libs)

[ ] Build sharedlibbusybox(NEW)                                     
[*] Build with Large File Support (for accessingfiles > 2 GB)        
(arm-linux-)  Cross Compilerprefix

make -j4

makeinstall   生成:  _install

制作文件系统 

mkdir filesystem
cd filesystem
cp ../busybox-1.22.1/_install/*  .-r
mkdir   etc dev opt sys tmp mnt lib proc
mkdir  etc/init.d
vim  etc/init.d/rcS
添加

mount -t ramfs none  /dev
mount -t sysfsnone  /sys
mount -t proc  none  /proc
mount -t tmpfs none  /tmp
/sbin/mdev  -s

保存退出
vim  etc/inittab
添加

::sysinit:/etc/init.d/rcS
ttySAC0::askfirst:-/bin/sh

保存退出
vim  etc/profile
添加

export  PS1="[root @ cjy \W ] #"

保存退出
mknod  dev/console  c  5  1
cp /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* ./lib   -r
cd ..
权限:chmod 777 filesystem -R
发布文件系统
vim   /etc/exports
添加
/work/nfs/filesystem      *(rw,sync,no_root_squash)

保存退出
检查文件系统是否已经发布
showmount -e 192.168.1.123
现在网络文件系统以及可以共享,后面会给单板接上网线,然后设置uboot参数、单板IP,及nfs等参数。

4、编译uboot

光盘自带的uboot,无法直接使用,上电后只会打印OK。但是官方论坛可以下载到1506可以使用的uboot,链接如下:http://www.arm9home.net/read.php?tid-80810.html。也可以使用这篇博客体提供的uboot:http://blog.csdn.net/lizuobin2/article/details/52825033

下载后配置,编译即可产生uboot。

本人使用的uboot下载链接:http://download.csdn.net/detail/fengyuwuzu0519/9886366

tar xzf uboot_tiny4412-20130729.tgz
cd uboot_tiny4412
make tiny4412_config
make

编译 用于生成bl2 的工具

cd sd_fuse;
make

假设SD卡已被PC Linux识别为/dev/sdc, 以root用户运行以下命令即可:

cd sd_fuse/tiny4412
./sd_fusing.sh  /dev/sdc

到此我们准备好了

(1) 内核

(2) 文件系统

(3) Uboot

接下来就是如何下载,并启动内核,挂接文件系统了。

二、下载系统文件,并启动内核。

2.1、下载uboot到emmc

参考:

http://www.cnblogs.com/pengdonglin137/articles/4161084.html

http://www.arm9home.net/read.php?tid-83474.html

(1)之前我们已经将uboot下载到SD卡,现在从SD卡启动uboot,可以看到如下信息:

(2)查看设备的分区表信息

fdisk -p 0

fdisk -p 1

设备mmc1的分区信息,即eMMC分析,注意这个是superboot分区信息,我们就用这个分区。

分区1 是FAE分区, 分区2 是给system的,分区3是user-data, 分区4 是 cache.

(3)格式化eMMC

u-boot模式下输入如下指令来格式化eMMC设备。
#uboot:fdisk -c 1 320 2057 520
执行后会返回分区信息,继续格式话分区1,2,3,4
#uboot:fatformat mmc 1:1
这句话意思是对mmc 1设备的第一分区格式作fat格式化。
#uboot:ext3format mmc 1:2
#uboot:ext3format mmc 1:3
#uboot:ext3format mmc 1:4
上面三个指令是分别对eMMC的分区2,3,4作ext3格式化。
到此我们完成了对eMMC的设备的格式化。

(4)如果提示如下错误:

Error: No MBR is found at SD/MMC.                                            
Hint: use fdisk command to make partitions.
则先执行指令"fdisk -c 0",执行过程如下:
#fdisk -c 0                                                        
fdisk is completed

对emmc初始化后,我们开始使用dnw来下载uboot到emmc中。现在我们就需要装一下linux的dnw工具,注意dnw是下载到内存,把固件数据缓存起来,然后烧录到eMMC中。

(5)Linux下DNW工具安装:

主要参考了:

http://blog.sina.com.cn/s/blog_69dd1a09010196bf.html

http://blog.csdn.net/u011452544/article/details/39393857

http://blog.csdn.net/morixinguan/article/details/70478650

1.首先解压缩文件:
# tar xvf dnw_for_linux.tar.gz
另:在Ubuntu下右键解压也很方便

目录如下:
dnw_linux/
dnw_linux/secbulk/
dnw_linux/secbulk/Makefile
dnw_linux/secbulk/secbulk.c
dnw_linux/dnw/
dnw_linux/dnw/dnw.c
其中secbulk.c是PC端USB驱动, dnw.c是写入工具

2 编译并加载secbulk.c内核模块

$cd secbulk
$make -C /lib/modules/`uname -r`/build M=`pwd` modules
编译成功后在当前目录下可以看到secbulk.ko

3.编译完成后,会生成secbulk.ko文件:
# ls
Makefile       Module.symvers  secbulk.ko     secbulk.mod.o
modules.order  secbulk.c       secbulk.mod.c  secbulk.o

4.加载模块到Linux内核:
# sudo insmod ./secbulk.ko        (注意要在root权限下)
# dmesg        (查看是否加载成功)
secbulk:secbulk loaded

usbcore:registered new interface driversecbulk        (看到这样两行就说明成功了)

开机的时候不会自动加载.ko文件,这样每次都要先加载才可以使用,此时将其加入开机脚本,
使其得到自动加载,编辑/etc/init.d/rc.local 在最后加上 insmod /所在路径/secbulk.ko。

5.下面开始编译dnw工具
# cd ../dnw
# gcc -o dnw dnw.c

(编译完成,会看到dnw可执行文件)

6.将文件copy到/usr/local/bin目录
# sudo cp dnw /usr/local/bin
这样就可以在shell下面直接使用dnw命令了

但是问题出现了,当我使用这个dnw下载bl2.bin的时候,会出现校验错误。但是下载其他文件均没有问题,于是网上各种寻找DNW工具,看安装,最后通过和另一个版本的DNW结合,解决了这个问题,uboot也完整的下载到了emmc中。下载链接:http://download.csdn.net/detail/fengyuwuzu0519/9886362。

(6)DNW下载好了,我们可以把uboot下载到emmc了。

#uboot:emmc open 1
提示:eMMC OPEN Success.!!

上面提示emmc开启成功,注意说明,emmc一旦打开,需要连续烧录,烧录完成后可以关闭emmc

#uboot:dnw
提示:OTG cable Connected!

Now, Waiting forDNW to transmit data(等待DNW下载)

打开虚拟机,进入uboot所在目录

cd /work/uboot_tiny4412

dnw  sd_fuse/tiny4412/E4412_N.bl1.bin

此时u-boot中断会提示传送校验完成,此时已经把bl1.bin通过USB传送到了memeory的0xc0000000起始地址,大小8KB.

接下来我们烧录bl1.bin到eMMC中,u-boot下继续输入:
#uboot:mmc write 1 0xc0000000 0 0x10
会提示写入信息,说明已经写入成功。这个是把刚才从PC端通过dnw下载下来的bl1.bin固件下载到emmc中,起始0, 16个block, 一个block是512B, 16*512=8*1024=8KB. 这个是bl1.bin的存放位置。
以此类推,烧录bl2.bin. u-boot.bin, tzsw.bin

#uboot:dnw

#虚拟机:dnw sd_fuse/tiny4412/bl2.bin

#uboot:mmc write 1 0xc0000000 0x10 0x1C

#uboot:dnw

#虚拟机:dnw u-boot.bin

#uboot:mmc write 1 0xc0000000 0x30 0x21D

#uboot:dnw

#虚拟机:dnw sd_fuse/tiny4412/E4412_tzsw.bin

#uboot:mmc write 1 0xc0000000 0x2c0 0xB8

启动分区到此全部写入完成,注意一定要关闭emmc
u-boot下继续输入:
#uboot:emmc close 1
提示:eMMC CLOSE Success.!!

现在uboot已经完整的烧入到emmc,我们可以将开关波动到NAND一侧,从emmc启动,发现uboot输出已经变成了:

2.2、下载内核到emmc

参考:http://blog.csdn.net/lizuobin2/article/details/52825033

内核下载我们采用fastboot下载,uboot已经支持了fastboot。

安装windows下fastboot工具

如果你已经安装了Android Studio,那么你已经有fastboot工具,在目录

F:\AndroidSDK\platform-tools下有fastboot.exe AdbWinApi.dll

我也提供一下fastboot下载链接:http://download.csdn.net/detail/fengyuwuzu0519/9886552

下载我们进入uboot,执行fastboot,并将单板的usb接到PC。提示如下:

windows下cmd进入fastboot.exe所在目录

fastboot flashkernel zImage(正常下载)

fastboot flashramdisk ramdisk-u.img(正常下载)

fastboot flash fatrootfs_qtopia_qt4.img (下载始终出错,于是放弃光盘的文件系统,使用自制的文件系统)

fastboot reboot

此时,我们已经将uboot、内核下载到单板中。

参考:http://blog.csdn.net/lizuobin2/article/details/52825033

2.3、设置uboot启动参数,启动内核,并挂接网络文件系统

uboot启动参数:
set gatewayip  192.168.1.1
set ipaddr     192.168.1.125   //板子的IP
set serverip   192.168.1.123   //PC机IP

set bootargs "root=/dev/nfsnfsroot=192.168.1.123:/work/nfs/filesystem ip=192.168.1.125console=ttySAC0,115200 lcd=S70 ctp=2"

save

set bootcmd moviread kernel 0 40008000;movi read rootfs 0 41000000 100000;bootm 4000800041000000

reset

内核启动信息:

tiny4412学习(一)之从零搭建linux系统(烧写uboot、内核进emmc+uboot启动内核)相关推荐

  1. 基于VMware从零搭建Linux系统

    基于VMware从零搭建Linux系统 1.安装VMware和CentOS VMware官网 官方地址:https://www.vmware.com/cn.html 其地址:https://www.n ...

  2. Linux 系统烧写实操

    系统烧写实操 在Linux系统烧写初探一文中介绍了mfgtool烧写工具及其工作原理,下面以 I.MX6U-ALPHA EMMC开发板为平台,分别介绍如何烧写 NXP官方系统,以及烧写自制系统 1. ...

  3. linux系统安装如何设置raid,在RAID磁盘阵列下如何搭建Linux系统

    因为RAID磁盘阵列的存储速度比单个硬盘高,在安装系统的时候一般会选择搭建在RAID磁盘阵列,下面小编就给大家介绍下RAID磁盘阵列搭建Linux系统的方法. 新配了台电脑,准备装个双系统,windo ...

  4. 磁盘阵列 php,Linux_在RAID磁盘阵列下如何搭建Linux系统,  因为RAID磁盘阵列的存储速 - phpStudy...

    在RAID磁盘阵列下如何搭建Linux系统 因为RAID磁盘阵列的存储速度比单个硬盘高,在安装系统的时候一般会选择搭建在RAID磁盘阵列,下面小编就给大家介绍下RAID磁盘阵列搭建Linux系统的方法 ...

  5. Linux系统学习方法——写给小白 每个人都有心中向往的一些事情,而我,刚进实验室,看到师兄师姐在电脑前面噼里啪啦的敲代码,真的好羡慕,看着他们实现一个又一个的功能满心欢喜,我也很想尝试。后来了解到师

    Linux系统学习方法--写给小白 每个人都有心中向往的一些事情,而我,刚进实验室,看到师兄师姐在电脑前面噼里啪啦的敲代码,真的好羡慕,看着他们实现一个又一个的功能满心欢喜,我也很想尝试.后来了解到师 ...

  6. 【Tiny4412】烧写Qt文件系统到EMMC

    00. 目录 文章目录 00. 目录 01. 烧写内核 02. 启动文件系统 03. 烧写Qt文件系统到EMMC 04. 问题讨论 05. 参考 01. 烧写内核 1.1 在minicom中输入如下命 ...

  7. 56-20210402华为海思Hi3516DV300的linux系统下读取TF卡(eMMC模式)

    56-20210402华为海思Hi3516DV300的linux系统下读取TF卡(eMMC模式) 2021/4/2 15:02 https://xueqiu.com/7970718062/159110 ...

  8. linux镜像烧写,基于TMS320C6678的Linux镜像烧写演示

    1.串口调试软件配置 配置前请使用Micro USB线连接调试串口和电脑终端. 安装调试终端软件 推荐使用SecureCRT调试终端软件,安装包路径:"光盘资料/Tools/VanDyke. ...

  9. python学习框架图-从零搭建深度学习框架(二)用Python实现计算图和自动微分

    我们在上一篇文章<从零搭建深度学习框架(一)用NumPy实现GAN>中用Python+NumPy实现了一个简单的GAN模型,并大致设想了一下深度学习框架需要实现的主要功能.其中,不确定性最 ...

最新文章

  1. 打包本地文件, 并使用Winscp上传脚本
  2. Android 的 ramdisk.img、system.img、userdata.img 作用说明,以及UBoot 系统启动过程
  3. PAT甲级题目翻译+答案 AcWing(并查集)
  4. java环境变量含义_Java环境变量的配置及意义
  5. 服务器系统2012怎么多人连接,windows2012服务器TCP连接数
  6. 2010夏令营——还孩子快乐成长的空间
  7. 用计算机转换层次的例子,两类层次分析法的转换及在应用中的比较-计算机工程与应用.PDF...
  8. php 输出 jsonp
  9. python矩阵赋值提高速度_Numpy大规模矩阵运算优化加速技巧
  10. 彻底分析ARP病毒查杀防范全攻略
  11. 《ISO20000-12011 认证合格判定基础》(证书样例子+认证文档+录音下载)
  12. matlab arma 仿真,基于Matlab的ARMA模型时间序列分析法仿真
  13. 蚁群算法详解及其工程源码
  14. R语言hist作直方图
  15. Deep Gait Recognition: A Survey 阅读笔记
  16. 消息队列一|从秒杀活动开始聊起消息队列
  17. Elasticsearch入门教程(六):Elasticsearch查询(二)
  18. linux cpan 参数配置,CPAN 的使用
  19. Houdini图文笔记:用Houdini实现随机自然倒角
  20. shell中vi的基本操作及Xshell 常用命令

热门文章

  1. 从零开始—仿牛客网讨论社区项目(六)
  2. Cisco路由器限速
  3. 沃邮箱 android,联通沃邮箱手机客户端
  4. Introduction of internet P2P technology
  5. 搜索-Query Understanding (QU)
  6. BZOJ1972:[SDOI2010]猪国杀
  7. django management扩展 manage.py 创建自定义命令
  8. 你的野花,朕的kibana
  9. AMBA总线协议(一)——一文看懂APB总线协议
  10. Java多线程编程之读写锁【ReentrantReadWriteLock】