tiny4412学习(一)之从零搭建linux系统(烧写uboot、内核进emmc+uboot启动内核)【转】
本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/74080109
版权声明:本文为博主原创文章,转载请注明http://blog.csdn.net/fengyuwuzu0519。
- 硬件平台: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、制作根文件系统
参考: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启动内核)【转】的更多相关文章
- 讯为开发板的最小LINUX系统烧写及U盘的挂载及卸载
fdisk -c 0 fatformat mmc 0:1ext3format mmc 0:2ext3format mmc 0:3ext3format mmc 0:4 fastboot fastboot ...
- [Intel Edison开发板] 06、Edison开发在linux中烧写、配置、搭建开发环境
1.前言 linux上烧写.配置.搭建Edison环境,千万不要用默认的setup tool for ubuntu!!! (即使,你用的就是ubuntu) 因为,其默认的工具会从一个坏链接下载配置文件 ...
- LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS
LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163. ...
- Linux第三周学习总结——构造一个简单的Linux系统MenuOS
第三周学习总结--构造一个简单的Linux系统MenuOS 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...
- 1_jz2440在linux下烧写裸机程序
常用的烧写方法有: 1.使用并口工具烧写:接线(参考百问网JZ2440V2开发板使用手册),使用oflash烧写(速度比较慢),可烧写.bin文件,从新上电观察效果.可烧写u_boot. 2.使用op ...
- 【Linux】基于VMware搭建Linux系统
本篇文章侧重于操作,主要内容大致包括: 两大类操作系统简要介绍 VMware Workstation Pro 15简要介绍及安装 CentOS简要介绍及基于Wi'n'dows 操作系统的安装 一 关于 ...
- Linux学习之路2-linux系统烧写
fastboot烧写方式 准备工作: 硬件– 串口线连接开发板串口con3到PC的串口– OTG线连接开发板的OTG接口和PC的USB接口软件– 串口工具(超级终端),默认波特率为115200– 烧写 ...
- 《Linux内核分析》第三周学习小结 构造一个简单的Linux系统OS
郝智宇 无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第三周 构造一个简单的Linux系统Me ...
- Android 搭建Linux系统
本文精心从网上搜罗出相关资料并整理,含有大量外部链接 安卓手机上安装linux大致分为两种方案 一.使用Linux Deploy 二.使用 Linux on Android 本文对Linux Depl ...
随机推荐
- CAD使用GetAllAppName读所有名称(网页版)
主要用到函数说明: MxDrawEntity::GetAllAppName 得到所有扩展数据名称,详细说明如下: 参数 说明 [out, retval] IMxDrawResbuf** ppRet 返 ...
- 梦想CAD控件安卓参数绘图
在CAD绘图中,参数化绘图可以帮助我们极大缩短设计时间,用户可以按照设计意图控制绘图对象,这样即使对象发生了变化,具体的关系和测量数据仍将保持不变,能够对几何图形和标注进行控制,可以帮助用户应对耗时的 ...
- TFRecordReader "OutOfRangeError (see above for traceback): RandomShuffleQueue '_1_shuffle_batch/random_shuffle_queue' is closed and has insufficient elements (requested 1, current size 0)" 问题原因总结;
1. tf.decode_raw(features['image_raw'],tf.uint8) 解码时,数据类型有没有错?tf.float32 和tf.uint8有没有弄混??? 2. tf.tra ...
- 【2018百度之星资格赛】F 三原色图 - 最小生成树
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6349 Knowledge Point: 最小生成树算法Prim&Kruskal Summari ...
- 『 Luogu P3205 』 HNOI2010 合唱队
解题思路 设置两个二维数组 $f$ 和 $g$,含义如下. $f[l][r]$ 表示在期望得到的队形中 $l\rightarrow r$ 这段区间初始队形排列的方案数,并且最后一个加入进去的是第 $l ...
- Springboot2.0中jpa默认创建的mysql表为myisam引擎问题
使用Springboot2.0后,使用jpa操作mysql数据库时,默认创建的表的引擎是myisam,myisam是不能加外键的,找了一些资源,最终可以用此方法解决! yml格式: spring: j ...
- 使用yolo3模型训练自己的数据集
使用yolo3模型训练自己的数据集 本项目地址:https://github.com/Cw-zero/Retrain-yolo3 一.运行环境 1. Ubuntu16.04. 2. TensorFlo ...
- Python进阶-打包程序为exe
操作系统:win7 x64 运行环境:Python3.5 安装PyInstaller 第一步:下载PyInstaller https://github.com/pyinstaller/pyinstal ...
- Ubuntu notes
ubuntu notes Table of Contents 1. backup data 2. Basics Ubuntu 3. Install, uninstall packages 4. Bas ...
- Glossary in Turbulence
Table of Contents 1. Concepts/Glossary 1.1. Turbulent eddy viscosity ,μt 1.2. Turbulent kinetic ener ...