海思3519使用uboot进行烧写kernel和rootfs

海思3519使用uboot进行烧写kernel和rootfs

最近再移植hi3519的kernel和rootfs,由于是在别人的板子上进行移植,已经存在uboot了,所以只需再uboot下把自己的kernel和rootfs文件烧进去即可

第一步: 准备kernel

kernel我就用海思官方提供的已经生成好的uImage,如有不同可自行下载linux源码修改编译。

第二步:准备rootfs

rootfs需要跟自己开发板上的flash相对应,不同的文件系统有不同的优缺点,下列出常用的文件系统分类,更详细的可自行百度查看。

常用文件系统包括有 cramfs、jffs2、NFS、initrd、yaffs2、ext4 以及
squashfs、ubifs。它们的特点如下:
cramfs 和 jffs2 具有好的空间特性,很适合嵌入式产品应用。
cramfs 与 squashfs 为只读文件系统,目前只有 SPI Nor FLASH 支持这两种文件系
统。
squashfs 压缩率最高。
jffs2 为可读写文件系统。
NFS 文件系统适用于开发初期的调试阶段。
yaffs2 文件系统只用于 NAND Flash。
initrd 采用 cramfs 文件系统,为只读。
ext4 文件系统用于 eMMC 卡

想知道自己是那种flash,可问硬件工程师,也可再uboot界面查看到,例如
海思3519使用uboot进行烧写kernel和rootfs_第1张图片
图中所画出的红线里有flash的类型和大小,我的是nor flash 32MB,黄线画出的是flash的块大小,我的是64k,那么就可以制作文件系统了,制作的命令海思官方文档里有详细说明,我所需要的文件系统海思刚好有提供例程,我就直接拿来用了。

第三部:开始移植

海思文档中提供了linux下的tftp,我用的是Windows下思科的TFTP服务器来进行传输,首先将准备好的uImag(kernel)和rootfs_hi3519av100_64k.jffs2(rootfs)放入思科TFTP服务器的根目录下,然后先下载uImage,首先输入

mw.b 22000000 ff 400000 //将0xff写入到开发板内存的0x22000000到0x22400000处,
						为什么是400000呢,这里的400000是16进制数,转换成
						十进制数后就是4M,我的kernel大小是3M多,刚好下进去还有多
						这一步可以理解为将内存清出来给即将要下的uImage腾出位置。
						
tftp 22000000 uImage //这一部是将准备好的uImage下载到0x22000000处。

sf probe 0			// 在开始sf操作前,需要先执行这条命令,否则再运行sf write
								或者sf erase时,会报错。
								
sf erase 100000 400000 // 因为我的开发板有uboot在,我给uboot的分区是想给他1M,所以
						  我从flash开始偏移100000(1M)处开始擦粗上面的程序,总共要
						  擦除400000(4M),因为我的kernel需要这么大空间
						  
sf write 22000000 100000 400000 // 接下来就是将原来下到开发板内存处0x22000000的程序
								   写到刚刚flash腾出来的地方了
								   0x22000000代表我刚刚下的uImage存放的位置,
								   100000代表flash上偏移的值,为1M,之前的0~100000
								   我用来存放uboot,
								   400000代表我所需要搬运的程序的大小,
								   我的uImage定的是4M,所以需要搬运400000(4M)

后下载我的rootfs_hi3519av100_64k.jffs2,跟烧写kernel差不多,就是偏移值不同

mw.b 22000000 ff 1B00000
tftp 22000000rootfs_hi3516a_64k.jffs2
sf probe 0
sf erase 500000 1B00000 // 因为我的kernel加uboot已经有5M了,所以要从500000(5M)
					       开始烧rootfs(27M)
sf write 22000000 500000 1B00000

这只是最简单的分区了,分区的大小也可根据自己的需要修改,烧完后,需要设置启动参数,来告知系统我的分区是怎么样的。

setenv bootargs 'mem=256M console=ttyAMA0,115200 clk_ignore_unused root=/dev/mtdblock2 rw rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),27M(rootfs)'
setenv bootcmd 'sf probe 0;sf read 22000000 100000 500000; bootm 22000000' 
sa

之后reset重启,然后就会进入你移植的文件系统了

你可能感兴趣的:(海思3519使用uboot进行烧写kernel和rootfs)