一、安装交叉编译工具链:
安装arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz交叉编译工具链:
sudo tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C /
cd /opt/FriendlyARM/toolschain/4.5.1/bin
ls //可以看到各种工具链
echo $PATH //环境变量指定了去哪里找命令
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
添加工具链路径:
export PATH=/opt/FriendlyARM/toolschain/4.5.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
/bin:/usr/games
sudo vi /etc/environment
PATH="/opt/FriendlyARM/toolschain/4.5.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
/bin:/usr/games"
arm-linux-gcc -v
得到:gcc version 4.5.1 (ctng-1.8.1-FA)
=================================================================================================
二、配置系统:
参考博文:编译linux内核make menuconfig配置命令无法执行
使用make menuconfig命令时出现“Unable to find the ncurses libraries or the”
说明没有安装‘libncurses5’库,在Ubuntu可以联网的情况下输入:
sudo apt-get install libncurses5-dev
安装libncurses5库的时候弹出“Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?”
无法找到libncurses5-dev 安装包,那就需要先执行设置Ubuntu连上网络再更新:
①网卡配置静态Ubuntu IP地址:
sudo vi /etc/network/interfaces
添加:
auto eth0
iface eth0 inet static
address 192.168.8.1
gateway 192.168.48.104
netmask 255.255.255.0
用下面的命令使网络设置生效:
sudo /etc/init.d/networking restart
②配置DNS:
sudo vi /etc/resolv.conf
如果提示/etc/resolv.conf只读可以先给/etc/resolv.conf增加可写权限:
sudo chmod 777 /etc/resolv.conf
sudo vi /etc/resolv.conf
添加:
nameserver 10.64.102.110
nameserver 10.64.101.110
手动重启网络服务:sudo /etc/init.d/networking restart
③再更新:
sudo apt-get update
再执行:
sudo apt-get install libncurses5-dev
=================================================================================================
三、编译系统:
1、编译uboot
a)解压 uboot_tiny4412-20130729.tgz 并进入相应的目录
tar xzf uboot_tiny4412-20130729.tgz
cd uboot_tiny4412/
b)配置 uboot 并编译
make tiny4412_config
make
c)编译 用于生成bl2 的工具
make -C sd_fuse
或者
cd sd_fuse; make
2、编译Linux内核
a)解压linux-3.5-20131010.tar.gz
tar xvzf /tmp/linux/linux-3.5-20131010.tar.gz
将创建生成linux-3.5目录,里面包含了完整的内核源代码
b)配置和编译内核
Linux内核与Android内核(安卓编译见:Tiny4412_Android编译步骤)使用的是同一份源码,但是配置不同,使用以下命令编译内核:
cd linux-3.5/
cp tiny4412_linux_defconfig .config ;注意config前面有个”.”
你可以执行make menuconfig对配置进行修改,修改完成后,输出make进行编译:
make
最后会在arch/arm/boot目录下生成zImage,将它替换掉SD卡images/Linux/下的zImage烧写到tiny4412即可。
3、制作目标板文件系统映象(参考博文:从零制作tiny4412文件系统):
先安装make_ext4fs命令,从Tiny4412光盘中找到tools 目录下的linux_tools.tgz,将这个文件在Ubuntu根目录下解压,如果你是从网上下载的iso文件,可以通过以下命令加载iso,然后解压:
mkdir –p /mnt/iso
mount –o loop Tiny4412-20130707.iso /mnt/iso
cd /
tar xvzf /mnt/iso/tools/linux_tools.tgz
或
sudo tar xvzf linux_tools.tgz -C / //解压到Ubuntu的根目录下
再制作镜像文件:
make_ext4fs -s -l 314572800 -a root -L linux rootfs_qtopia_qt4.img rootfs_qtopia_qt4
将生成的rootfs_qtopia_qt4.img替换掉SD卡images/Linux/下的rootfs_qtopia_qt4.img烧写到Tiny4412即可。
=================================================================================================
四、Tiny4412和PC互传文件方法:
参考博文:Tiny4412和PC传文件(含挂载NFS文件系统)方法
将编译好的可执行文件下载到目标板目前主要4种方式:
第一种:通过ftp传送文件到开发板(推荐使用)
第二种:复制到介质(如优盘)
第三种:通过串口传送文件到开发板
第四种:用nfs文件系统作为根文件系统启动
下面分别进行介绍:
1、使用ftp传送文件(推荐使用)
说明:使用ftp登录目标板,把编译好的程序上传;然后修改上传后目标板上的程序的可执行属性,并执行。
首先,在PC端执行,如下所示:
ftp 192.168.48.151
用户名:plg
密 码:plg
设置文件传送格式:bin
传送hello文件 :put hello
退出登录:by
然后,在目标板一端执行,如下所示:
到接收目录下 :cd /home/plg/
ls
增加可执行权限:chmod +x hello
运行测试 :./hello
2、先把编译好的可执行程序复制到优盘,再把优盘插到目标板上并挂载它,然后把程序拷贝到目标板的可执行目录/bin:
①. 复制程序到优盘
把优盘插到PC的USB接口,执行以下命令把程序复制到优盘
#mount /dev/sda1 /mnt ;挂接优盘
#cp hello /mnt ;复制刚才编译好的程序到优盘
#umount /mnt ;卸载优盘
②. 把程序从优盘拷贝到目标板并执行
把优盘插入到开发板的USB Host接口,优盘会自动挂载到/udisk目录,执行以下命令就可以运行hello程序了。
#cd /udisk
#./hello ;执行hello程序
注意:如果此时强制拔出优盘,需要退回到根目录,再执行umount /udisk方可为下一次做好自动挂载的准备。
3、通过串口传送文件到开发板
通过5.3.5章节我们学会了如何通过串口传送文件到开发板,你也可以通过相同的方法传送hello可执行程序,具体步骤在此不再详细描述,记得传送完毕把文件的属性改为可执行才能正常运行。
#chmod +x hello
说明:有些用户使用USB转串口线,因为有些转接器性能是不太好的,所以有时会出现“传输超时”或者根本无法传输到开发板的现象,因此我们建议使用ftp传送到开发板。
4、用nfs文件系统作为根文件系统
①.参考博文“Tiny4412友善之臂ARM开发板静态IP设置(重启有效)”把开发板的ip设置为静态的;
参考博文“Ubuntu下如何安装NFS服务及其配置”启动ubuntu的nfs服务
②.Ubuntu安装nfs服务:
sudo apt-get install nfs-kernel-server
Ubuntu nfs重启服务
sudo /etc/init.d/portmap restart
sudo /etc/init.d/nfs-kernel-server restart
在Ubuntu上查看nfs服务器:
sudo /etc/init.d/nfs-kernel-server start //查看nfs是否启动
③.增加权限:
sudo vi /etc/exports
添加:
/home/book/workspace/tiny4412_project/rootfs_qtopia_qt4 *(insecure,rw,async,no_root_squash)
/home/book/workspace/tiny4412_project/new_fs_tiny4412 *(insecure,rw,sync,no_subtree_check,no_root_squash)
sudo chown book:book /home/book/workspace/tiny4412_project/rootfs_qtopia_qt4/ -R
sudo chown book:book /home/book/workspace/tiny4412_project/new_fs_tiny4412/ -R
chmod 777 /home/book/workspace/tiny4412_project/rootfs_qtopia_qt4
chmod 777 /home/book/workspace/tiny4412_project/new_fs_tiny4412
④.Ubuntu上尝试自己挂在自己:
sudo mount -t nfs -o nolock,vers=2 192.168.48.104:/home/book/workspace/tiny4412_project/rootfs_qtopia_qt4 /mnt //挂载厂家提供文件系统
sudo mount -t nfs -o nolock,vers=2 192.168.48.104:/home/book/workspace/tiny4412_project/new_fs_tiny4412 /mnt //挂载自己做的文件系统
sudo umount /mnt
⑤.tiny4412开发板手动挂载nfs:
mount -t nfs -o nolock,vers=2 192.168.48.104:/home/book/workspace/tiny4412_project/rootfs_qtopia_qt4 /mnt //挂载厂家提供文件系统
mount -t nfs -o nolock,vers=2 192.168.48.104:/home/book/workspace/tiny4412_project/new_fs_tiny4412 /mnt //挂载自己做的文件系统
⑥.tiny4412开发板nfs作为根文件系统启动(自己做的文件系统):
参考:"SD卡启动u-boot烧写裸板、系统"和"fastboot工具下载tiny4412的uboot、linux、文件系统"编译烧写uboot、linux、filesystem后采用eMMC启动开发板,并设置开发板linux启动时的ip地址,再设置uboot的参数bootargs采用nfs启动根文件系统:
修改命令行:
默认:
set bootargs root=/dev/mmcblk0p2 init=/linuxrc console=ttySAC0,115200 lcd=S70 ctp=2
改为:
seten bootargs noinitrd root=/dev/nfs nfsroot=192.168.48.104:/home/book/workspace/tiny4412_project/new_fs_tiny4412 ip=192.168.48.100:192.168.48.104:192.168.48.255:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200 lcd=S70 ctp=2
注意:tiny4412使用的是usb接口的网卡,目前的uboot根本就不支持这个网卡,所以uboot以nfs作为根文件系统启动无法实现,可以参考下文“驱动测试搭建开发环境”中在linux启动后设置自动挂载nfs文件系统。
DTB Device Tree 视频教程:以瑞萨Cortex-A15为例:
http://www.hexiongjun.com/?s=Device+Tree
Tiny4412裸机程序汇总地址:
http://www.100ask.org/bbs/forum.php?mod=viewthread&tid=11778&highlight=tiny4412
iTOP-4412实现NFS网络文件系统启动(包括安装Ubuntu NFS服务、编译配置内核)
http://www.oschina.net/question/2371345_2158782
=================================================================================================
五、从SD卡中的uboot启动并烧写裸板bin文件、烧写EMMC引导文件:
Tiny4412从SD卡启动自己编译的u-boot用linux下的DNW烧写应用程序:
-----------------------------------------------------
1. Build uboot
a) 安装好toolchain (arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)并设置好
环境变量PATH,保证可以正常使用,用arm-linux-gcc -v查看版本。
b) 解压 uboot_tiny4412-20130729.tgz 并进入相应的目录
tar xzf uboot_tiny4412-20130729.tgz
注意:①使用裸机视频配套的u-boot源码,官方提供的源码需要关闭u-boot中MMU的使能,因为裸机实验和irq中断实验要操作实际的物理地址,
使用MMU以后不知道具体物理地址映射到哪;
修改官方源码如下:
---------------------------------
vi include/configs/tiny4412.h
把:#define CONFIG_ENABLE_MMU改为:#undef CONFIG_ENABLE_MMU
vi board/samsung/tiny4412/config.mk //此处的0xc3e00000即为MMU映射地址,不是实际的物理地址
把:CONFIG_SYS_TEXT_BASE = 0xc3e00000改为:CONFIG_SYS_TEXT_BASE = 0x43e00000
---------------------------------
②Tiny4412开发板DDR内存地址范围为:0x40000000 - 0x80000000
其中0x40000000 - 0x50000000 :256M
0x50000000 - 0x60000000 :256M
0x60000000 - 0x70000000 :256M
0x70000000 - 0x80000000 :256M
一共是1G容量!可以直接使用裸机视频配套的u-boot源码,也可以按照上面自己修改。
c) 配置 uboot 并编译
cd uboot_tiny4412
make tiny4412_config
make
d) 编译 用于生成bl2 的工具
make -C sd_fuse
或者
cd sd_fuse; make
-----------------------------------------------------
2. 制作启动 Tiny4412 的SD卡
a) 先准备一张4G或以上的SDHC卡
注意:该卡的已有数据将会被破坏,因此请先对SD卡上的数据进行备份。
b) 将ubuntu置于前台,使用读卡器将SD插入电脑中;
查看设备:fdisk -l
ls /dev/sd* //检测到/dev/sdc
查看SD卡是否被挂载到media目录下: ls /media/ //可知已经被挂载到E6C0-BDC3目录下
如果被自动挂载了使用umount卸载u盘:umount E6C0-BDC3
c) 将u-boot写入SD卡中,fusing SD card
假设SD卡已被PC Linux识别为/dev/sdc, 以root用户运行以下命令即可:
cd uboot_tiny4412/sd_fuse/tiny4412
sudo ./sd_fusing.sh /dev/sdc //ls /dev/sd*检测到/dev/sdc
出现以下信息表示成功,其烧写位置可以查看:vi sd_fusing.sh
/dev/sdc reader is identified.
---------------------------------------
BL1 fusing
16+0 records in
16+0 records out
8192 bytes (8.2 kB) copied, 0.098622 s, 83.1 kB/s
---------------------------------------
BL2 fusing
28+0 records in
28+0 records out
14336 bytes (14 kB) copied, 0.237704 s, 60.3 kB/s
---------------------------------------
u-boot fusing
540+1 records in
540+1 records out
276932 bytes (277 kB) copied, 3.09264 s, 89.5 kB/s
---------------------------------------
TrustZone S/W fusing
184+0 records in
184+0 records out
94208 bytes (94 kB) copied, 1.43541 s, 65.6 kB/s
---------------------------------------
U-boot image is fused successfully.
Eject SD card and insert it again.
-----------------------------------------------------
3. 使用SD卡启动 Tiny4412 并烧写裸机.bin文件
a) 将已经制作好的SD卡插到 Tiny4412 板上,拨动S2切换到SDBOOT;同时将ubuntu置于前台,连接
串口线到PC,使用lsusb可以查看到串口设备:
Bus 002 Device 006: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
ls /dev/ttyUSB*
可知串口为:/dev/ttyUSB0
b) 然后在串口控制台执行:
sudo minicom
或者:
sudo minicom -s
或者:
su root //直接切换为root用户登录:123456
minicom //再运行minicom串口程序:
进入初始化minicom界面,初始化完成以后可以看到Welcome to minicom 2.5欢迎界面;
按下CTRL+A,然后松开,紧接着按下Z即可进入minicom设置界面,可以按O键设置串口Serial Device : /dev/ttyUSB0
按F关闭硬件流控:F - Hardware Flow Control : No 等等,按回车键确认设置。
注意:设置保存后给开发板上电minicom始终没有显示任何接收到的串口数据,经过一番折腾,要先退出minicom,按下“Ctrl+A”再按下“Z”,进入minicom的帮助界面后,输入"X"或者“Q”即可退出minicom,退出时提示是否复位minicom,选择“YES”回车,再执行minicom命令重新启动
问题解决,开发板上电后串口正常输出数据,开发板加电,按任意键进入uboot 命令行模式。
c) 安装dnw-linux工具:
解压linux下的dnw工具:tar xvzf dnw-linux.tar.gz
cd dnw-linux/
编译:make
安装:sudo make install
d) 查询uboot编译运行地址:
在Ubuntu上uboot根目录下执行:vim System.map //查看运行的地址范围确定u-boot的MMU已经关闭成功
可知printf函数在uboot编译后的地址为0x43e11a2c;
e) 烧写裸板test.bin测试:
注意:
①最好是在ubuntu下执行sudo minicom启动minicom,因为下载裸板程序需要用USB下载线,如果用wins下用SecureCRT工具登录启动minicom的话
在执行dnw命令下载文件的时候wins会提示安装usb线的驱动程序。
②根据在Ubuntu上uboot根目录下执行:vim System.map得到printf函数地址0x43e11a2c修改test.c函数
void (*printf)(char *, ...) = 0x43e11a2c;
在ubuntu中输入sudo minicom命令启动minicom,把开发板上电,可以看到uboot的启动信息,按空格进入uboot中,
minicom中输入下载命令:
dnw 70003000 //第一个测试程序的Makefile脚本中注明程序链接地址为0x70003000,故下载到0x70003000地址
Ubuntu命令行在待下载文件的目录下输入传送文件命令:
sudo dnw test.bin
在Ubuntu端可以看到:
-------------------------------
load address: 0x57E00000
Writing data...
100% 0x00008066 bytes (32 K)
speed: 0.116533M/S
--------------------------------
在ubuntu的minicom端:
--------------------------------
Now, Waiting for DNW to transmit data
Download Done!! Download Address: 0x70003000, Download Filesize:0x805c
Checksum is being calculated.
Checksum Value => MEM:22b7 DNW:2357
Checksum failed.
--------------------------------
下载成功,在minicom执行命令跳到70003000链接地址去运行:
go 70003000
运行结果:
## Starting application at 0x70003000 ...
value = 0x600001d3
## Application terminated, rc = 0x0
-----------------------------------------------------
4. 使用SD卡启动 Tiny4412 并烧写Linux
a) 将已经制作好的SD卡插到 Tiny4412 板上,拨动S2切换到SDBOOT,同时连接
串口线到PC且假设已经准备好。
b) 开发板加电,使用ubuntu下的串口工具(如minicom)或者使用windows下的串口工具(如SecureCRT),按任意键进入uboot 命令行模式
mmcinfo 0 : 查看mmc卡信息。0 表示SD卡; 1表示emmc卡,如下:
查看SD卡指令: mmcinfo 0
得到:
Device: S3C_HSMMC2
Manufacturer ID: 3
OEM: 5344
Name: SL08G
Tran Speed: 0
Rd Block Len: 512
SD version 2.0
High Capacity: Yes
Size: 7580MB (block: 15523840)
Bus Width: 4-bit
Boot Partition Size: 0 KB
查看emmc卡指令: mmcinfo 1
得到:
Device: S5P_MSHC4
Manufacturer ID: 15
OEM: 100
Name: 4YMD3
Tran Speed: 0
Rd Block Len: 512
MMC version 4.0
High Capacity: Yes
Size: 3728MB (block: 7634944)
Bus Width: 8-bit
Boot Partition Size: 4096 KB
注意:mmc 0就是我们的SD卡,mmc 1设备就是我们要烧录的设备eMMC,uboot返回提示是8-bit,内存容量是4G的eMMC卡。
c) 查看mmc 0/1设备的分区表信息:
mmc0的分区信息,即SD分区: fdisk -p 0
得到::
partion # size(MB) block start # block count partition_Id
1 557377 778135908 1141509631 0x72
2 945326 168689522 1936028240 0x65
3 945326 1869881465 1936028192 0x79
4 27 -1409286144 55499 0x0D
mmc1的分区信息,即eMMC分区: fdisk -p 1
得到:
partion # size(MB) block start # block count partition_Id
1 3594 134244 7361046 0x83
注意:这两条指令是分别查看mmc 0/1设备的分区表信息。设备mmc1的分区信息,即eMMC分区,注意这个是superboot分区信息,我们就用这个分区。
d) 对eMMC卡进行分区
输入以下uboot命令即可对eMMC卡进行分区:
fdisk -c 1 320 2057 520
返回信息:
Count: 10000
fdisk is completed
partion # size(MB) block start # block count partition_Id
1 695 6070812 1424478 0x0C
2 320 134244 656304 0x83
3 2057 790548 4213770 0x83
4 520 5004318 1066494 0x83
e) 返回分区信息后,继续格式化分区1,2,3,4:
对mmc 1设备的第一分区格式作fat格式化:
fatformat mmc 1:1
再对eMMC的分区2,3,4作ext3格式化:
ext3format mmc 1:2
ext3format mmc 1:3
ext3format mmc 1:4
到此我们完成了对eMMC的设备的格式化,接下来我们要想办法烧录bl1.bin, bl2.bin, u-boot.bin, tzsw.bin烧录到eMMC中。
f) 从PC端下载固件到开发板Memory中
在上面我们已经安装了dnw工具, 接下来我们要使用此工具来下载固件到开发板内存中。注意是下载到内存,把固件数据缓存起来,到时要烧录到eMMC中。
首先我们要打开emmc设备,u-boot下输入命令:
emmc open 1
得到:
eMMC OPEN Success.!!
!!!Notice!!!
!You must close eMMC boot Partition after all image writing!
!eMMC boot partition has continuity at image writing time.!
!So, Do not close boot partition, Before, all images is written.!
上面提示emmc开启成功,注意说明,emmc一旦打开,需要连续烧录,烧录完成后可以关闭emmc.
g) 下面使用串口工具(dnw/SecureCRT)烧写:E4412_N.bl1.bin、bl2.bin、u-boot.bin、tzsw.bin
注意:在u-boot启动模式下用Ubuntu的minicom串口工具下载(如果没有启动minicom输入:sudo minicom启动)要让Ubuntu置于前台插上USB下载线,在串口工具中输入下载命令;如果使用windows下的SecureCRT串口工具下载,在输入下载命令之前要让USB线切换到ubuntu下服务器才能使用dnw命令传文件,切换方法如下图所示,烧写其他文件一样:
① 烧写E4412_N.bl1.bin:
uboot下载命令:dnw 0x40000000 //下载到0x40000000地址处
得到:
OTG cable Connected!
Now, Waiting for DNW to transmit data
提示等待数据输入,这里就是等待我们从PC端通过DNW传送数据过来。
此时在PC端终端,cd到u-boot目录所在路径:
输入:sudo dnw sd_fuse/tiny4412/E4412_N.bl1.bin
得到:
load address: 0x57E00000
Writing data...
100% 0x0000200A bytes (8 K)
speed: 0.023703M/S
下载完成后minicom提示信息:
OTG cable Connected!
Now, Waiting for DNW to transmit data
Download Done!! Download Address: 0x40000000, Download Filesize:0x2000
Checksum is being calculated.
Checksum Value => MEM:63a1 DNW:64a3
Checksum failed.
此时u-boot模式下的minicom中会提示传送校验完成,此时已经把bl1.bin通过USB传送到了memeory的0x40000000起始地址,大小8KB.
接下来我们烧录bl1.bin到eMMC中,u-boot下继续输入:
mmc write 1 0x40000000 0 0x10
会提示写入信息,说明已经写入成功:
MMC write: dev # 1, block # 0, count 16 ... 16 blocks written: OK
这个是把刚才从PC端通过dnw下载下来的bl1.bin固件下载到emmc中,起始0, 16个block, 一个block是512B,16*512=8*1024=8KB. 这个是bl1.bin的存放位置。
以此类推,烧录bl2.bin. u-boot.bin, tzsw.bin
=====================================================
② 烧写bl2.bin:
u-boot终端继续输入:
dnw 0x40000000 //下载到0x40000000地址处
PC端输入: (注意输入内容是以 dnw 开始的,前面是当前路径,便于理解)
sudo dnw sd_fuse/tiny4412/bl2.bin
u-boot下继续输入:
mmc write 1 0x40000000 0x10 0x1C
返回信息:
MMC write: dev # 1, block # 16, count 28 ... 28 blocks written: OK
bl2.bin实际大小约14K,分配的空间是16K. 其实是第16个block开始,写入28个block, 28*512B=14*1024=14K
注意这个区域预分配是32个Block,所以下一个开始是32+16=48
=====================================================
③ 烧写u-boot.bin:
u-boot终端继续输入:
dnw 0x40000000 //下载到0x40000000地址处
PC端输入: (注意输入内容是以 dnw 开始的,前面是当前路径,便于理解)
sudo dnw u-boot.bin
u-boot下继续输入:
mmc write 1 0x40000000 0x30 0x21D
返回信息:
MMC write: dev # 1, block # 48, count 541 ... 541 blocks written: OK
u-boot.bin实际大小约270K,分配的空间是328K. 其实是第48个block开始,写入541个block, 541*512B=270.5*1024 约270K
=====================================================
④ 烧写tzsw.bin:
u-boot终端继续输入:
dnw 0x40000000 //下载到0x40000000地址处
PC端输入: (注意输入内容是以 dnw 开始的,前面是当前路径,便于理解)
sudo dnw sd_fuse/tiny4412/E4412_tzsw.bin
u-boot下继续输入:
mmc write 1 0x40000000 0x2c0 0xB8
返回信息:
MMC write: dev # 1, block # 704, count 184 ... 184 blocks written: OK
tzsw.bin实际大小约92K,分配的空间是160K. 其实是第704个block开始,写入184个block, 184*512=92*1024=92K
=====================================================
启动分区到此全部写入完成,注意一定要关闭emmc,
u-boot下继续输入:
emmc close 1
返回信息:
eMMC CLOSE Success.!!
关闭emmc设备,提示关闭成功。此时我们已经把启动文件全部烧录到了eMMC中。
h) 设为eMMC启动:
接下来我们可以把开发板的SW2拨动到NAND启动,同时u-boot中断输入reset, 并在电脑键盘按下任意键,此时我们可以看到:
U-Boot 2010.12 (Aug 23 2016 - 19:58:49) for TINY4412
CPU: S5PC220 [Samsung SOC on SMP Platform Base on ARM CortexA9]
APLL = 1400MHz, MPLL = 800MHz
Board: TINY4412
DRAM: 1023 MiB
vdd_arm: 1.2
vdd_int: 1.0
vdd_mif: 1.1
BL1 version: N/A (TrustZone Enabled BSP)
Checking Boot Mode ... EMMC4.41
REVISION: 1.1
MMC Device 0: 3728 MB
MMC Device 1: 7580 MB
MMC Device 2: N/A
*** Warning - using default environment
Net: No ethernet found.
Hit any key to stop autoboot: 0
大功告成啊,我们的u-boot已经成功写入到了eMMC中,并可以成功启动。
i) 设置启动参数:
还有一件非常重要的事情我们还有做,就是启动参数写入,我们bootargs写入到env分区,注意ENV分区在TZSW分区后面,内核分区之前,即 TZSW | ENV | KERNEL。
从eMMC启动u-boot后,在u-boot终端输入:
setenv bootargs console=ttySAC0,115200n8 androidboot.console=ttySAC0 uhost0=n ctp=2 skipcali=y vmalloc=512m lcd=S70
saveenv
设置并保存启动参数,此时再重启板子,进入U-boot。
u-boot下输入:
printenv
查看刚才烧录的启动参数是否成功。
(下面烧写kernel、文件系统的详细操作参考博文:”fastboot工具下载tiny4412的uboot、linux、文件系统“)
j) 烧写kernel:
详细操作参考博文:”fastboot工具下载tiny4412的uboot、linux、文件系统“
下面烧kernel, system,ramdisk和SD卡烧录一样。
u-boot继续输入:
fastboot
进入fastboot模式。
PC端使用:
fastboot -w
fastboot flash kernel zImage
fastboot flash system system.img
fastboot flash ramdisk ramdisk-u.img
fastboot reboot
movi read kernel 0 40008000
bootm 40008000
启动linux成功!
即可把剩下全部的img烧录到eMMC中,重启开发板,就可以启动开发板。
(注意:fastboot这个命令是我主机上的命令,如果不能运行要先安装再用./fastboot)
k) 另一种烧写文件系统的方式:
参考博文“tiny4412将uboot、zImage、文件系统烧到emmc中”
内核启动后挂载的是nfs网络文件系统,通过nfs文件系统启动后:
ls /dev/mmc* //可以查看到emmc设备
手动挂载mmc设备:mount /dev/mmcblk0p3 /mnt
将文件系统拷贝进去,然后解压:
cp /rootfs_qtopia_qt4-20131130.tar.gz /mnt
进入mnt目录并解压,将里面的文件mv出来。
设置权限:
chmod 777 /mnt -R
vi etc/init.d/rcS
最后加入:
/sbin/getty -L ttySAC0 115200 vt100
进入uboot设置环境变量
set bootargs console=ttySAC0 root=/dev/mmcblk0p3 rootfstype=ext4 init=linuxrc uhost0=y ctp=2
save
然后重启OK!---到此SD卡和网线都可以拔掉啦。
-------------------------------------------------------------------------
5. 使用SD卡启动 Tiny4412 并烧写Android
a) 将已经制作好的SD卡插到 Tiny4412 板上,拨动S2切换到SDBOOT,同时连接
串口线到PC且假设已经准备好。
b) 开发板加电,然后在串口控制台(如minicom),按任意键进入uboot 命令行模式
c) 对SD卡进行分区
输入以下uboot命令即可对SD卡进行分区:
fdisk -c 0 320 806 518
重新分区后,可重新格式化FAT分区
fatformat mmc 0:1
d) 进入fastboot模式以烧写Android
使用USB线连接Tiny4412的MICRO_USB口到PC,然后输入以下uboot命令:
fastboot
e) 烧写 Android 到SD卡
首先请准备好Android image,包括: zImage, ramdisk-u.img, system.img
在PC端输入以下命令进行烧写:
fastboot flash kernel zImage (烧写kernel)
fastboot -w (格式化userdata和cache)
fastboot flash ramdisk ramdisk-u.img (烧写ramdisk)
fastboot flash system system.img (烧写system)
f) 也可以在PC端通过fastboot烧写uboot到SD卡
先手动生成bl2.bin
cd sd_fuse/tiny4412
../mkbl2 ../../u-boot.bin bl2.bin 14336
然后输入以下命令:
fastboot flash fwbl1 E4412_N.bl1.bin
fastboot flash bl2 bl2.bin
fastboot flash bootloader ../../u-boot.bin
fastboot flash tzsw E4412_tzsw.bin
-----------------------------------------------------
6. 使用SD卡启动 Android
a) 如果是使用HD700,则烧写完成后直接重启Tiny4412 即可自动启动 Android
b) 如果是使用S700,则需要在uboot上设置kernel命令行参数:
setenv bootargs console=ttySAC0,115200n8 androidboot.console=ttySAC0 lcd=S700
saveenv
然后重启Tiny4412即可。
参考:USB转串口之minicom的设置
http://blog.csdn.net/crazyleen/article/details/5914942
参考:ubuntu串口工具(minicom、kermit)的使用
http://blog.csdn.net/ccwwff/article/details/6540870
==============================================================================================
六、把裸板bin文件烧写SD中直接启动系统:
SD卡烧写裸板程序:
上篇博文“SD卡启动u-boot烧写裸板、系统”中采用的方法是在SD卡中烧写好uboot,设置开发板为SD卡启动,使用SD卡中的uboot来烧写程序。
本节采用的方法是把裸板bin文件直接烧写到SD卡中,在4412启动时首先运行固化在芯片内部iROM中的程序,把启动设备(可能是EMMC/nand flash、SD、USB启动)特定位置处的程序读入片内存 (iRAM) ,并执行它,BL1又把启动设备上另一个特定位置处的程序读入片内内存,并执行它。这个被称为 BL2(Bootloader 2) ,是我们编写的源码。(详情可参考博文“Exynos4412的启动过程分析”)
首先准备烧写所需工具软件:
①可以使用烧写uboot到SD卡中时使用的软件包:到uboot源码根目录下把sd_fuse文件夹整体拷贝到测试裸机代码的目录中。
增加权限: sudo chown book:book sd_fuse/ -R
进入sd_fuse目录: cd sd_fuse/
编译生成mkbl2工具: make
增加可执行权限: sudo chmod 777 Makefile mkbl2 sd_fdisk sd_fdisk.c V310-EVT1-mkbl2.c
进入tiny4412目录: cd tiny4412/
增加sd_fusing.sh权限:sudo chmod 777 sd_fusing.sh E4412_N.bl1.bin E4412_tzsw.bin bl2.bin fast_fuse.sh
执行烧写命令: sudo ./sd_fusing.sh /dev/sdc ../../../hardware/1th_led_s/led.bin
②使用光盘中“Tiny4412资料”文件夹下“源码.rar”中tools下的sd_fusing.sh文件。在实际测试中发现uboot源码包下的sd_fuse文件夹中的sd_fusing.sh文件中命令是针对uboot烧写,直接使用会出现找不到'../../uboot.bin'的错误,故不能直接使用,需要修改;于是使用tools文件包里的sd_fusing.sh文件,但是此文件在运行的时候会出现"./sd_fusing.sh: 59: ./sd_fusing.sh: my_mkbl2: not found"错误,需要修改48行的"MKBL2=my_mkbl2",改为"MKBL2=./my_mkbl2"即可。
增加权限: sudo chown book:book tools/ -R
进入tools目录: cd tools/
增加可执行权限: sudo chmod 777 E4412_N.bl1.bin my_mkbl2 my_mktools.c sd_fusing.sh
执行烧写命令: sudo ./sd_fusing.sh /dev/sdc ../../../hardware/1th_led_s/led.bin
提示错误:dd: opening `/work/4412/tools/E4412_N.bl1.bin': No such file or directory
那就创建该目录: mkdir /work/4412/tools -p
cp E4412_N.bl1.bin /work/4412/tools/
再烧写: sudo ./sd_fusing.sh /dev/sdc ../../../hardware/1th_led_s/led.bin
成功:
/dev/sdc reader is identified.
---------------------------------------
BL1 fusing
16+0 records in
16+0 records out
8192 bytes (8.2 kB) copied, 0.833136 s, 9.8 kB/s
---------------------------------------
BL2 fusing
28+0 records in
28+0 records out
14336 bytes (14 kB) copied, 0.508101 s, 28.2 kB/s
---------------------------------------
source file image is fused successfully.
Eject SD card and insert it to Exynos 4412 board again.
把SD卡插到开发板上,设为SD卡启动,上电即可查看裸板程序运行状态。
==============================================================================================
驱动测试搭建开发环境:
由于采用nfs作为文件系统启动失败,所以在内核启动后在把服务器的/home/book/workspace/tiny4412_project/driver/mountfile目录挂载到开发板的mnt目录下:
在开发板上修改文件:vi /etc/init.d/rcS
在修改开发板启动ip地址的下面增加:
mount -t nfs -o nolock,vers=2 192.168.48.104:/home/book/workspace/tiny4412_project/driver/mountfile /mnt
注意:在Ubuntu中给mountfile目录增加权限后要重启虚拟机,重启开发板就会在开发板/mnt目录下自动挂载Ubuntu的mountfile目录
==============================================================================================
七、fastboot工具下载tiny4412的uboot、linux、文件系统:
参考博文:fastboot工具下载tiny4412的uboot、linux、文件系统
fastboot工具下载tiny4412的uboot、linux、文件系统:
1、烧写eMMC:
参考博文“SD卡启动u-boot烧写裸板、系统”把E4412_N.bl1.bin、bl2.bin、u-boot.bin、tzsw.bin等文件烧入eMMC中,再设置开发板为eMMC启动,从eMMC的uboot中启动开发板。
2、安装windows下的fastboot工具:
①在网上下载window下的fastboot工具包,解压工具包,我解压在window下的:"C:\Documents and Settings\Administrator\My Documents\fastboot"目录目录下;
②打开windows的dos界面,"开始"->"运行"->"cmd";
③进入fastboot工具目录下:
④可以看到工具包下的fastboot工具软件:
⑤把要烧录的文件u-boot.bin、zImage、ramdisk-u.img、rootfs_qtopia_qt4.img放到fastboot目录下;
3、用eMMC上的uboot格式化分区:
参考博文“android系统移植u-boot烧写emmc方法”用window下的fastboot工具下载tiny4412烧写linux内核、文件系统,在Ubuntu的minicom串口工具或者windows下的SecureCRT串口工具上操作开发板进入eMMC中的uboot模式。vfat 分区为fat32格式。其它都为 ext3 文件系统格式。
格式vfat分区: #:fatformat mmc 0:1
0:同上意思,表示的已经加载的emmc设备节点。
1:表示第1个分区,注意。程序默认第一个分区必须为fat分区,
只能指定为 1 ,程序会比较是否为分区1,不是就不会格式化。
格式ext3分区:
#:ext3format mmc 0:2 //system
#:ext3format mmc 0:3 //userdata
#:ext3format mmc 0:4 //cache
注意:格式化fatformat mmc 0:1时如果提示如下错误:
Error: No MBR is found at SD/MMC.
Hint: use fdisk command to make partitions.
则先执行指令"fdisk -c 0",执行过程如下:
fdisk -c 0
得到:
fdisk is completed
问题即可解决!
4、用eMMC上的uboot烧写系统:
输入下载命令: fastboot
uboot会进入待接收文件状态:
[Partition table on MoviNAND]
ptn 0 name='fwbl1' start=0x1000A len=N/A (use hard-coded info. (cmd: movi))
ptn 1 name='bl2' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 2 name='bootloader' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 3 name='tzsw' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 4 name='kernel' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 5 name='ramdisk' start=N/A len=0x6800(~27262976KB) (use hard-coded info. (cmd: movi))
ptn 6 name='system' start=0x1000A len=0x501D8(~336027648KB)
ptn 7 name='userdata' start=0x1000A len=0x202605(~-2137517056KB)
ptn 8 name='cache' start=0x1000A len=0x822FF(~546044928KB)
ptn 9 name='fat' start=0x1000A len=0xADE2F(~729332736KB)
OTG cable Connected!
在windows的dos界面依次输入命令下载系统文件:
fastboot flash bootloader u-boot.bin
fastboot flash kernel zImage
fastboot flash ramdisk ramdisk-u.img
fastboot flash system rootfs_qtopia_qt4.img
每次下载成功以后dos会提示:
sending 'bootloader' (252 KB)... OKAY
writing 'bootloader'... OKAY
开发板串口提示:
Received 17 bytes: download:0048ff00
Starting download of 4783872 bytes
....
downloading of 4783872 bytes finished
Received 12 bytes: flash:kernel
flashing 'kernel'
writing kernel..device 0 Start 1057, Count 12288
MMC write: dev # 0, block # 1057, count 12288 ... 12288 blocks written: OK
completed
partition 'kernel' flashed
fastboot工具下载tiny4412的uboot、linux、文件系统
5、至此使用eMMC中的uboot已经把系统文件全部下载到eMMC中,接下来可以设置uboot参数启动开发板内核了:
baudrate=115200
bootargs=root=/dev/mmcblk0p2 init=/linuxrc console=ttySAC0,115200 lcd=S70 ctp=2
bootcmd=movi read kernel 0 0x40008000;bootm 0x40008000
bootdelay=5
ethaddr=00:40:5c:26:0a:5b
gatewayip=192.168.48.1
ipaddr=192.168.48.100
netmask=255.255.255.0
serverip=192.168.48.104
save保存
6、启动内核:
使用reset命令重启开发板,启动弄内核的过程中内核卡死如下:
Uncompressing Linux..... done, booting the kernel.
内核卡死后可通过:make menuconfig配置内核查看打印信息:
Kernel hacking -> Kernel low-level debugging functions 是打开的
Kernel hacking -> Kernel low-level debugging messages via S3C UART 也是打开的
打开调试开关后可由打印信息得到:
原版的内核配置把CONFIG_ARM_TRUSTZONE给打开了,这个与superboot.bin是配套使用的,但是u-boot经研究发现暂不支持TZ模式,所以内核配置要把这个选项去掉,不然按照教程会出现死机。
7、设置uboot参数:
用eMMC上面的uboot启动内核之前要设置内核参数,参考:“手把手教你从头开始搭建友善之臂ARM-tiny4412开发环境(史上最详细!!)”
①自动读取SD卡上的内核并且启动:
在minicom中:
set bootcmd "fatload mmc 0:10x40008000 zImage;bootm 0x40008000"
save
reset //查看是否会自动启动内核
②eMMC内核启动
a) DNW下载内核到板子uboot 地址0x40008000
b)写内核
movi write kernel 0 0x40008000
c) 设置自动启动
set bootcmd "movi read kernel 0 0x40008000;bootm 0x40008000"
d) reset //自动启动内核
set bootargs "root=/dev/mmcblk0p2 rootfstype=ext3 console=ttySAC0,115200 lcd=S70 ctp=2"
set bootargs "root=/dev/mmcblk0p2 init=/linuxrc console=ttySAC0,115200 lcd=S70 ctp=2"
8、错误:“jpeg_m2m_open: cannot specify node type”
启动失败,于是只能自己制作的文件系统了
===============================================================================================
八、制作tiny4412文件系统:
制作tiny4412文件系统:
本部分参考了博文:手把手教你从头开始搭建友善之臂ARM-tiny4412开发环境(史上最详细!!)
烧写eMMC上的uboot参考博文:SD卡启动u-boot烧写裸板、系统
下载部分参考博文:fastboot工具下载tiny4412的uboot、linux、文件系统
1、安装busybox:
tar xvzf busybox-1.17.2-20101120.tgz
cd busybox-1.17.2/
make defconfig //使用默认配置
make menuconfig //配置busybox
①选择:Busybox Settings->Build Options->Cross Compiler prefix:
输入:arm-linux-
②设置“TAB”补全功能
在Busybox Setting -->
Busybox Library Tuning -->
[*] Tab completion
③按照下面配置:
Busybox Settings --->
[*] Build BusyBox as a static binary (no shared libs)
[*] Build BusyBox as a positionindependent executable (NEW)
[ ] Force NOMMU build
[ ] Build shared libbusybox (NEW)
[*] Build with Large File Support (for accessing files > 2 GB)
(arm-linux-) Cross Compiler prefix
④保存退出
⑤编译:
make -j4
⑥安装:
mkdir /home/book/workspace/tiny4412_project/new_fs_tiny4412 //作为自己制作文件系统的根目录
make CONFIG_PREFIX=/home/book/workspace/tiny4412_project/new_fs_tiny4412 install //安装到文件系统的根目录下
注意:执行安装步骤时不能直接运行:make install命令,因为我们的busybox是给ARM系统用的,执行make instal命令它会直接把busybox安装在pc机上,破坏了PC机的系统。
总结:至此Busybox已经配置、安装完成,可以在安装目录:/home/book/workspace/tiny4412_project/new_fs_tiny4412下看到Busybox的安装文件,接下来就可以创建、编译根文件系统了!
2、制作文件系统文件、目录:
①创建目录:
cd /home/book/workspace/tiny4412_project/new_fs_tiny4412/
mkdir etc dev opt sys tmp mnt lib proc
mkdir etc/init.d
②构建etc/init.d/rcS:
vim etc/init.d/rcS
添加
mount -t ramfs none /dev
mount -t sysfs none /sys
mount -t proc none /proc
mount -t tmpfs none /tmp
/sbin/mdev -s
保存退出。
③构造/etc/inittab:
vim etc/inittab
添加
::sysinit:/etc/init.d/rcS
ttySAC0::askfirst:-/bin/sh
保存退出。
④创建etc/profile:
vim etc/profile
添加
export PS1="[root @ cjy \W ] #"
保存退出。
⑤创建字符设备:
mknod dev/console c 5 1
⑥安装glibc库:
cp /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* ./lib -r
⑦增加根目录权限:
cd ..
chmod 777 new_fs_tiny4412 -R
⑧发布文件系统
vim /etc/exports
添加
/home/book/workspace/tiny4412_project/new_fs_tiny4412 *(insecure,rw,sync,no_subtree_check,no_root_squash)
保存退出
⑨检查文件系统是否已经发布:
showmount -e 192.168.48.104 //服务器ip
3、制作文件系统映像:
从Tiny4412光盘中找到tools 目录下的linux_tools.tgz,将这个文件在Ubuntu根目录下解压:
sudo tar xvzf linux_tools.tgz -C / //解压到Ubuntu的根目录下
make_ext4fs -s -l 314572800 -a root -L linux new_fs_tiny4412.img new_fs_tiny4412
弹出错误:
error: build_directory_structure: unknown file type on root/dev/console
经过和厂家提供的rootfs_qtopia_qt4-20141213.tar.gz文件系统作对比发现厂家提供的qt文件系统的dev目录下已经不存在console字符设备节点了,故决定手动删除之前创建的字符设备节点console文件,删除后再编译:
rm -rf dev/*
make_ext4fs -s -l 314572800 -a root -L linux new_fs_tiny4412.img new_fs_tiny4412
得到:
Creating filesystem with parameters:
Size: 314572800
Block size: 4096
Blocks per group: 32768
Inodes per group: 6400
Inode size: 256
Journal blocks: 1200
Label: linux
Blocks: 76800
Block groups: 3
Reserved block group size: 23
Created filesystem with 417/19200 inodes and 7354/76800 blocks
编译根文件系统镜像成功!
4、烧写文件系统:
参考博文:fastboot工具下载tiny4412的uboot、linux、文件系统
用eMMC中的uboot启动开发板,把编译出来的rootfs_qtopia_qt4.img文件用fastboot工具烧写到eMMC的'system'分区:
开发板uboot启动模式下输入下载命令: fastboot
在windows的dos界面依次输入命令下载系统文件:
fastboot flash system rootfs_qtopia_qt4.img
烧写完成后dos界面提示如下:
开发板接收文件完成会自动烧写到eMMC对应分区中。
5、启动内核并挂载文件系统:
eMMC中uboot默认参数为:
baudrate=115200
bootargs=root=/dev/mmcblk0p2 init=/linuxrc console=ttySAC0,115200 lcd=S70 ctp=2
bootcmd=movi read kernel 0 0x40008000;bootm 0x40008000
bootdelay=3
ethaddr=00:40:5c:26:0a:5b
gatewayip=192.168.0.1
ipaddr=192.168.0.20
netmask=255.255.255.0
serverip=192.168.0.10
启动内核并挂载文件系统:
reset
即可看到:Please press Enter to activate this console.
6、设置网络:
vi /etc/init.d/rcS 做如下修改,让内核启动后自动配置网络参数,打开网卡连接:
ifconfig eth0 192.168.48.100
ifconfig eth0 up
上一篇:Tiny4412和Tiny210裸板程序烧写比较
下一篇:Tiny4412_Android编译步骤
推荐阅读最新更新时间:2024-03-16 16:16