创客神器NanoPi
直播中

张卜方

6年用户 35经验值
擅长:可编程逻辑 MEMS/传感技术 嵌入式技术 处理器/DSP
私信 关注
[经验]

【NanoPC-T3 Plus试用体验】一步一步教你制作mini SD卡刷机包,网上找不到的教程!

` 本帖最后由 1132932051 于 2018-3-7 00:06 编辑

来吧!开始吧,不知道各位小伙伴是否被庞大的系统给折腾够了,解压后的ubuntu core系统实在是太庞大了,接近7个G!


开始一步一步制作我们想要的大小的刷机包吧!
开始肯定是困难重重,WIKI手册讲的不是很清楚,初学者一定头大,找不到出路,那就开始分析吧~
5.JPG 4.JPG
不知道有人没有人去尝试按照上面说得去做!这也太麻烦了吧,还得把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【不让放网址,变态!】
10.JPG
6.JPG

开始尝试制作刷机包,只包含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、上电
捕获.JPG
嗯、第一步成功~~不容易~~

怎么启动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
8.JPG
是不是恍然大悟,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文件刷入开发板吧!

如果你没有放文件系统,会出现如下报错!!!
捕获1.JPG








` 捕获2.JPG

更多回帖

发帖
×
20
完善资料,
赚取积分