此文章讲解了iTOP-4412开发板上刷写ubuntu的流程。android、qt、最小linux系统的刷写也可以此为参考,但这三个系统更建议使用fastboot刷写方式,速度更快,更简单。
准备工具:2g以上大小TF卡一个、ubuntu虚拟机(其他linux虚拟机也可)一个、超级终端(SecureCRT也可,用于通过串口和板子进行通信)。将开发板的靠近有线网口的串口连接至电脑(直连或使用usb转串口线连接,后者的话电脑端可能需要安装usb转串口的驱动),在电脑设备管理器里查看对应的是哪个串口,后面将会使用此串口进行刷机。
准备文件:ubuntu系统压缩包、zImage、zImage_sd、u-boot-iTOP-4412.bin(板子能启动到uboot模式的话,此文件可不用刷)
刷机思路:给板子的MMC和外置TF卡分好区,然后在linux虚拟机中将ubuntu系统解压到TF卡中,之后在板子上启动TF卡中的系统,最后通过TF卡中的系统将ubuntu系统解压到MMC上。这个过程中TF卡类似一张跳板。
刷机流程概述:
MMC分区(板子自带存储)、TF卡分区 –> 在虚拟机中将ubuntu系统压缩包解压到TF中 –>刷入zImage_sd –> 启动到TF的ubuntu中 –> 解压ubuntu系统压缩包到MMC分区 –> 刷入zImage –> 正常启动板子
uboot模式介绍:板子上电后,按下任意键(有点类似电脑进入bios的方式),会进入到板子的uboot模式(新板子的uboot出厂时已经刷好了,如果板子不能进入uboot模式,可参考使用手册<出厂首次刷写>来制作可以启动uboot的TF卡,另外此时需要修改板子上的启动开关),此模式下可对MMC或TF进行分区,也可烧写zImage包来设定板子是启动MMC中的操作系统还是启动TF卡中的操作系统,甚至可以烧写uboot文件(大多数情况下uboot不用烧写)。
开刷
第一步,给MMC和TF卡分区
板子上电,快速按任意键,进入到uboot模式。
- 先给MMC分区:
//-c表示分区,0表示0号磁盘,即mmc,相应的TF卡为1号磁盘,2700表示分区大小,单位为MB
fdisk -c 0 2700 300 300
这条命令会将MMC分为四个区,大小分别为2700MB、300MB、300MB、剩余空间。2700MB分区是操作系统的所在分区,我们的系统也会解压到此处。分区大小可以调整,但要保证2700MB分区能放入操作系统。
这四个分区在磁盘的实际顺序和将要格式化的分区格式如下:
剩余空间分区(fat32) 2700MB(ext3) 300MB(ext3) 300MB(ext3)
然后给这四个分区分别格式化。
fatformat mmc 0:1 //第一个分区格式化为fat模式
ext3format mmc 0:2 //操作系统所在分区,此分区
ext3format mmc 0:3
ext3format mmc 0:4
- 然后给TF卡分区和格式化,这里直接贴命令了
fdisk -c 1 1500 50 50 //1500那个分区将会放置我们的操作系统
fatformat mmc 1:1
ext3format mmc 1:2
ext3format mmc 1:3
ext3format mmc 1:4
这时分区就完毕了,接下来我们要将系统解压到TF卡中。
第二步,解压ubuntu系统到TF卡中
将TF卡插到电脑上。启动电脑的linux虚拟机,并将TF卡以U盘的形式挂在到虚拟机上。根据linux系统不同,有的linux系统需要手动mount,有的会自动mount,我们的目标是找到TF卡上的那个1500的分区。使用如下命令解压ubuntu系统到TF卡中:
//ubuntu.tar为ubuntu系统压缩包路径,/mnt为TF卡1500分区映射路径
tar -xvf ubuntu.tar -C /mnt
解压会持续一会,另外如果TF卡或读卡器有问题,解压到一半时会失败(为此我换了好几个读卡器和TF卡)。
第三步,启动TF卡中的ubuntu系统并解压ubuntu系统压缩包到MMC中
- 先将TF卡插在电脑上,然后在windows下会看到tf卡分区(在windows下看到的实际是我们给tf卡分区时,剩余空间大小的那个分区),在其中新建名为sdupdate的文件夹,并将zImage、zImage_sd、u-boot-iTOP-4412.bin三个文件复制进去。
- 将TF卡插回板子,给板子上电并并进入到uboot中
- 执行如下命令刷入zImage_sd文件:
sdfuse flash kernel zImage_sd
如果需要刷如uboot,可以执行如下命令(大多数情况下,我们不需要刷uboot):
sdfuse flash bootloader u-boot-iTOP-4412.bin
- 执行
reset
命令重启开发版(这一次不需要进uboot,让板子继续继续启动即可)
第四步,解压ubuntu压缩包到mmc中
- 待板子启动后,我们会发现板子进入到了TF卡中的ubuntu系统。我们使用
fdisk -l
命令可以看到我们的MMC磁盘及其各个分区,我们需要使用mount命令将2700MB大小的那个分区挂载到ubuntu中,假设挂载到了/mnt/mmc
下 - 然后我们可以将ubuntu系统压缩包复制到一个u盘中(当然也可以将系统压缩包放到TF卡中,就是和zImage这些文件放在一起即可),然后mount一下,假设mount的路径为
/mnt/u
- 接下来将ubuntu系统压缩包解压到mmc中
//ubuntu.tar为u盘中系统压缩包的路径,/mnt/mmc为MMC的2700MB分区挂在的位置
tar -xvf /mnt/u/ubuntu.tar -C /mnt/mmc/
等待解压完毕即可。
最后一步,启动MMC中的ubuntu系统
TF卡不要拔,重启板子并进入uboot,然后刷入zImage文件
sdfuse flash kernel zImage
然后输入reset
命令重启板子。待板子启动完成后,我们的ubuntu就刷入完成了。
bonous
4412官方的uboot有两个缺陷,一是不支持1GB以上内存,二是不支持4GB以上大分区。如果你买的板子是2GB内存/16GBMMC的,刷完系统后肯定会发现只有1GB的内存(加上某些硬件占用,显示内存可能只有900MB甚至更少),而且分区时,无法设置大于4GB的分区。
本人经过对uboot源码的分析和修改,使其支持了1GB以上的内存,同时也支持4GB以上大分区,特此分享:
http://download.csdn.net/download/sxyandapp/10266809
后续,关于4412的板子之前是没有写文章的计划的。但前几天我尝试在板子上安装MysqL,虽然没有成功。但板子重启后就起不来了,网卡能启动,能ping通,但ssh无法连接,串口的控制台也无法进入。本来以为可以进入到TF卡的操作系统,然后覆盖一下MMC里的文件,结果刷了zImage_sd后,TF也无法进入。折腾了半天,最后使用fastboot方式重新刷的uboot、zImage,重新分区并解压操作系统文件才搞定。我还差点以为板子坏了,不过仔细想象,很可能是TF卡坏了,导致使用TF卡刷的uboot和zImage都是有问题的,我用fastboot在电脑上直接刷这两个文件应该是偶然的避开了TF的问题。现在板子已经重新刷写,上面的控制系统也能正常启动。 还有就是这次刷机风波中出现比较诡异的一件事,就是挂在驱动后,在/dev/下并没有出现设备节点,但驱动的probe函数等都已经正常执行,这个问题最终解决了,解决的方法会在后续文章中详解。
原文链接:https://www.f2er.com/ubuntu/349903.html