linux squash emmc分区,Tiny4412-实验指令笔记

一、安装交叉编译工具链:

安装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)

=================================================================================================

二、配置系统:

使用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即可。

先安装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互传文件方法:

将编译好的可执行文件下载到目标板目前主要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、文件系统:

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值