不知道有人没有人去尝试按照上面说得去做!这也太麻烦了吧,还得把SD卡插入ubuntu的电脑里面,文中都是推荐使用这采用在线更新的方式来更新刷机包的uboot、kernel文件。但是在上左图中隐约给出了制作刷机包的方法,使用 fusing.sh 脚本来制作刷机包。我是感觉不明其理。那好,就来分析这个脚本吧!
这里贴出有用的部分,如下所示。# ----------------------------------------------------------
# Fusing 2ndboot, bootloader to card
true ${BOOT_DIR:=./prebuilt}
BL2_BIN=${BOOT_DIR}/2ndboot.bin${EMMC}
BL2_POSItiON=1
TBI_BIN=${BOOT_DIR}/boot.TBI
TBI_POSITION=64
BL3_BIN=${BOOT_DIR}/bootloader
BL3_POSITION=65
# umount all at first
umount /dev/${DEV_NAME}* > /dev/null 2>&1
echo "---------------------------------"
echo "2ndboot fusing"
dd if=${BL2_BIN} of=/dev/${DEV_NAME} bs=512 seek=${BL2_POSITION}
echo "---------------------------------"
echo "bootloader fusing"
dd if=${TBI_BIN} of=/dev/${DEV_NAME} bs=512 seek=${TBI_POSITION} count=1
dd if=${BL3_BIN} of=/dev/${DEV_NAME} bs=512 seek=${BL3_POSITION}
#
echo "---------------------------------"
echo "Bootloader image is fused successfully."
echo ""
根据脚本,启动顺序为-->2ndboot.bin -->boot.TBI -->bootloader,这个声明原理,这个是满足uboot启动的几个步鄹,第一个及时芯片内部程序和称为第一阶段、然后执行2ndboot.bin称为第二阶段,在加载bootloader称为第三阶段。
2ndboot.bin:现在最新的uboot中已经把这个叫做SPL,也是uboot的一部分,只包含处理器和内存初始化
boot.TBI :什么tbl,不知道,应该是什么配置的
bootloader:实质的uboot.bin文件
注意这里得到最重要的,这些文件应该放在img刷机包的那个位置:
dd if=2ndboot.bin of=/dev/loop1 bs=512 seek=1
dd if=boot.TBI of=/dev/loop1 bs=512 seek=64 count=1
dd if=bootloader of=/dev/loop1 bs=512 seek=65(这里的/dev/loop1 是个回环地址,在后面讲到)
怎样得到上面的文件了??
答案是在ubuntu中 git clone【不让放网址,变态!】
开始尝试制作刷机包,只包含uboot代码,看第一步是否能够成功!
1、制作一个img映像文件
dd if=/dev/zero of=fs_nanopc_t3_64M.img bs=1M count=64
设置回环地址:
sudo losetup /dev/loop1 fs_nanopc_t3_64M.img
在分析脚本的时候得到下面结果
dd if=2ndboot.bin of=/dev/loop1 bs=512 seek=1
dd if=boot.TBI of=/dev/loop1 bs=512 seek=64 count=1
dd if=bootloader of=/dev/loop1 bs=512 seek=65
卸载回环地址
sudo losetup -d /dev/loop1
2、将生成的fs_nanopc_t3_64M.img通过Win32DiskImager.exe工具烧到sd卡中
3、插入
开发板、按住网口判断的boot按钮
4、上电
嗯、第一步成功~~不容易~~
怎么启动kernel了??
从分析官方提供的s5p6818-ubuntu-core-qte-sd8g-20180209.img刷机包开始吧!
1、设置成回环设备
sudo losetup /dev/loop0 s5p6818-ubuntu-core-qte-sd8g-20180209.img
2、查看分区
sudo fdisk /dev/loop0
设备 启动 Start 末尾 扇区 Size Id 类型
/dev/loop0p1 2048 133119 131072 64M 83 Linux
/dev/loop0p2 133120 15234373 15101254 7.2G 83 Linux
分成两个分区,一个是2048--113119共64M大小,一个是113120-15234373 共7.2G大小。
里面存放这些什么东西了,挂载看看!
2、识别分区
sudo partprobe /dev/loop0
3、挂载
sudo mount /dev/loop0p2 /mnt/fs
sudo mount /dev/loop0p1 /mnt/boot
是不是恍然大悟,loop0p1 第一个分区存放内核和一些启动时的文件,loop0p1 第二个分区很明显是ubuntu core文件系统
开始刷入内核到SD卡中吧!
1、在上面的基础上,对fs_nanopc_t3_64M.img文件进行分区
$ sudo fdisk /dev/loop0
分区信息如下:
设备 启动 Start 末尾 扇区 Size Id 类型
/dev/loop0p1 2048 133119 131072 64M 83 Linux
/dev/loop0p2 133120 262143 129024 63M 83 Linux
2、识别并格式化分区
$ sudo partprobe /dev/loop0
$ sudo mkfs.ext4 -I /dev/loop0p1
$ sudo mkfs.ext4 /dev/loop0p2(注意了必须是ext4 文件格式,不然s5p6818不认!我也是费了好久才知道!)
3、挂载分区
sudo mount /dev/loop0p2 /mnt/fs
sudo mount /dev/loop0p1 /mnt/boot
4、将s5p6818-ubuntu-core-qte-sd8g-20180209.img刷机包中的第一个分区的文件拷贝到/mnt/boot中
也可以去下载,这里如果需要更新内核你就替换uImage就好!
5、文件系统放放,太累了,相信你已经会了,自己用busybox构建一个最小文件系统放在第二个分区就可以了!
6、取消挂载
sudo umount /mnt/boot
sudo umount /mnt/fs
7、取消回环挂载
sudo losetup -d /dev/loop0
8、将生成的fs_nanopc_t3_64M.img文件刷入开发板吧!
如果你没有放文件系统,会出现如下报错!!!
`