tiny4412开发板实现uboot引导启动android 5.0.2系统

来源:互联网 发布:Mac任务管理器 编辑:程序博客网 时间:2024/06/05 21:50

1目的

实现uboot引导启动android 5.0.2系统。

2 现有环境

友善之臂tiny 4412开发板,superboot引导启动android5.0.2系统,内核版本为linux3.0.8。

3 搭建方案

3.1 技术上两种主流方案

1. 利用uboot生成bin文件,连同系统镜像文件烧写到SD卡,通过SD卡来引导开发板启动uboot,再启动android环境。

2. 利用uboot生成bin文件,烧写至SD卡,引导开发板uboot,用OTG数据线连接PC和开发板,再通过DNW程序,将镜像文件烧写到开发板的emmc 中,实现android环境启动。

3.2 方案比较

方案一对SD卡要求比较高(质量和速度),且中间过程出错后得重头开始,深刻教训!方案二循序渐进,不足之处是操作繁琐,但是比较稳定可靠,中间出错可及时修正。

经过了多次操作,我个人建议选择方案二。

4 实施步骤

本文档选择以方案二来介绍。

4.1 前提准备

4.1.1 linux环境准备

1.arm-linux-gcc-4.5.1              交叉编译器

2. linux-3.0.8-tiny4412            linux内核    →   编译出zImage镜像

3. android 5.0.2源码               编译android镜像文件

4. uboot源码                           生成启动引导文件

5. 安装minicom              串口程序

6. 安装dnw                                   数据传输程序

7. 安装fastboot

8. SD卡(容量4G32G之间)、串口线、OTG线

4.1.2 几点说明

1. gcc环境变量设置,极易出错,两种方式:(1)终端命令export PATH=$PATH:xxxxxxxxxxxxxxxxxxxxxxxx;(2)修改bashrc文件。

2. uboot 源码不能用友善之臂光盘里的源码,比较旧了,生成的bin文件不能引导新生产出来的开发板启动。

3. 生成linux内核镜像和android镜像,编译特别耗时间,尤其是android镜像,对环境要求极高,务必提前准备好环境

4.2 生成4个bin文件

       一共是4个bin文件,E4412_N.bl1.bin、 bl2.bin、uboot.bin和E4412_tzsw.bin。

       1.解压 uboot_tiny4412.tgz 并进入相应的目录

tar xzfuboot_tiny4412-20130729.tgz

2. 配置 uboot 并编译

cduboot_tiny4412

maketiny4412_config

make

3. 编译用于生成bl2 的工具

make -Csd_fuse

执行完就可以生成这4个bin文件。

4.3 制作SD启动卡

1. 用fat32的文件格式来格式化SD卡

2. 将bin文件烧写到SD卡上

cdsd_fuse/tiny4412

./sd_fusing.sh  /dev/sdc

需要注意的是:若SD卡已被PC Linux识别为/dev/sdc1、/dev/sdc2等时,烧写的命令里还是用 sdc,万万不可用sdc1

4.4 启动开发板

       1.开发板设置为SD卡启动(参照用户手册拨动S2开关),放入SD卡。

2. 连接串口线,配置minicom。

minicom  -s

   ┌─────[configuration]──────┐

   │ Filenames and paths     

   │ File transferprotocols 

   │ Serial port setup <== 选择这一项

   │ Modem and dialing       

   │ Screen and keyboard     

   │ Save setup as dfl       

   │ Save setup as..

   │ Exit  

   │ Exit from Minicom       

   └─────────────────┘

enter进入,按下面所示配置修改保存。

   ┌───────────────────────────┐

   │ A -    Serial Device      : /dev/ttyUSB0 

   │ B - Lockfile Location     : /var/lock    

   │ C -   Callin Program      :     

   │ D - Callout Program      :     

   │ E -    Bps/Par/Bits       : 115200 8N1   

   │ F - Hardware Flow Control :No  

   │ G - Software Flow Control :No  

   │      

   │  Change which setting?       

   └───────────────────────────┘

Save setup as dfl 保存成默认,然后Exit退出minicom。

3. 开发板加电,若开发板正常引导uboot, 按任意键启动uboot命令行模式

4.5 格式化emmc

1. 对emmc进行分区

可以通过fdisk -p 0 和fdisk -p 1两条命令来查看SD卡和emmc分区信息,由于当前是从SD卡启动,所以0代表SD卡,1代表emmc,后期如果S2开关拨回nand启动,则0表示emmc

fdisk -c 1 820 1557520 

emmc一共4G容量,这里的数值表示system 820Muserdata 1557Mcache 520M

说明:1. emmc分区的空间(4个区),其中system的空间大致控制在system.img容量的2倍左右;2. uboot中,对tiny4412.h文件修改,传输块的transfer_buffer_size设置应该比system.img(550M左右)容量稍大,我设置的是0x28000000,约640M(uboot初始值为0x18000000)。

2. 分区格式化

执行后会返回分区信息,继续格式话分区1,2,3,4

fatformat mmc1:1

对mmc 1设备的第一分区格式作fat格式化,接下来依次格式化2、3、4分区(扩展分区)作ext3格式化。

ext3format mmc1:2

ext3format mmc1:3

ext3format mmc1:4

4.6 烧写emmc

4.6.1. 将bin文件写入emmc

本操作要使用dnw程序,依次将E4412_N.bl1.bin、bl2.bin、 uboot.bin和E4412_tzsw.bin这4个文件写入。

1. 首先要打开emmc设备,在u-boot下输入:

emmc open 1

minicom会提示如下信息:

eMMC OPENSuccess.!!

                        !!!Notice!!!

!You mustclose eMMC boot Partition after all image writing!

!eMMC bootpartition has continuity at image writing time.!

!So, Do notclose boot partition, Before, all images is written.!

2. 上面提示emmc开启成功,注意说明,emmc一旦打开,需要连续烧写,烧写完成后可以关闭emmc,一共要经过4轮烧写。

轮次

uboot端

PC端

1

dnw

dnw sd_fuse/tiny4412/E4412_N.bl1.bin

 

mmc write 1 0xc0000000 0 0x10

 

起始0, 16个block, 一个block是512B, 16*512=8*1024=8KB. 这个是bl1.bin的存放位置

2

dnw

dnw sd_fuse/tiny4412/bl2.bin

 

mmc write 1 0xc0000000 0x10 0x1C

 

bl2.bin实际大小约14K,分配的空间是16K. 其实是第16个block开始,写入28个block, 28*512B=14*1024=14K,这个区域预分配是32个Block,所以下一个开始是32+16=48

3

dnw

dnw u-boot.bin

 

mmc write 1 0xc0000000 0x30 0x21D

 

u-boot.bin实际大小约270K,分配的空间是328K. 其实是第48个block开始,写入541个block, 541*512B=270.5*1024 约270K

4

dnw

dnw sd_fuse/tiny4412/E4412_tzsw.bin

 

mmc write 1 0xc0000000 0x2c0 0xB8

 

tzsw.bin实际大小约92K,分配的空间是160K. 其实是第704个block开始,写入184个block, 184*512=92*1024=92K

3. 最后要关闭emmc

emmc close 1

这时,可以退出SD卡,并将S2开关拨到nand启动,重启开发板,就可以从emmc启动uboot了,也就表示uboot已经成功刷入emmc了。

4.6.2 将镜像文件烧写入emmc

安装fastboot,通过fastboot将zImage、system.img、ramdisk-u.img三个镜像分别烧写至emmc的不同分区。

1. 连接好OTG数据线,uboot命令行模式下输入fastboot,等待pc端传输数据

2. PC 端分别使用如下命令:

fastboot flashkernel zImage

fastboot flashsystem system.img

fastboot flashramdisk ramdisk-u.img

即可把剩下全部的镜像烧写至tiny4412开发板的emmc中。

3. 设置环境变量,关系到开发板的正常启动

在uboot上设置kernel命令行参数:

   setenv bootargs console=ttySAC0,115200n8androidboot.console=ttySAC0 lcd=S702

   saveenv

4. 重启开发板,就可以启动开发板上的android系统了。

0 0
原创粉丝点击