[m3axpi] 关于 爱芯 ax620a 方案 如何 采用 EMMC 商业化 量产 成品 这件事
广告
练习时长两年半(不是),一颗 3.6TOPs@INT8 大算力低功耗超强夜景的芯片总算是来到了 MAIX-III Linux AI 系列!
没错,它就是来自「爱芯元智」的 AX620A,这是一款高算力,高能效比,低功耗的 AI SoC 芯片,芯片集成了四核 Cortex A7 @ 1Ghz CPU,带有浮点运算单元,支持 NEON,拥有 3.6TOPs@INT8 的高算力 NPU,支持 4K@30fps 的 ISP,以及支持 H.264、H.265 编码的 VPU,AX620A 还支持 32bit LPDDR4x,支持 EMMC v5.1 / SPI Flash,最多支持 6 路 MIPI 输入,同时最多支持 4 路工作,支持多路子码流,支持 1 路千兆 Ethernet,支持 1 路 USB2.0,支持 2 路 MIPI DSI/CSI 输出。拥有大算力和优异画质处理能力的 AX620A 可以实现更多的 AI 功能,带来最优的 AI 体验!(来自官方)
如果你想分享这款 AI 开发板给其他同学了解,请使用唯一的传送门「 wiki.sipeed.com/m3axpi 」。
前言
最近群里有很多小伙伴说需要 EMMC 做商业方案,所以我抽空处理了一下这个问题。
在我这里不推荐使用原厂烧录工具进行 EMMC 的量产,原厂烧录工具存在的问题是只支持 Windows 系统使用 USB OTG 线烧,不支持脚本化自动烧录。
这里我采用 DD 方案就整盘对拷解决问题,烧录主要是可以在外部预烧录一些东西,虽然说这在系统上电后也能实现,但硬件总是要上电出厂验证才能发货的嘛。
准备工作
两套 爱芯派 底板 加 核心板,加上一张 debian 系统 SD 卡,一颗大于 8GB 的 EMMC 颗粒。
最新物料为 LCD20221025 854x480 MIPI 屏幕,以及 RTL8189FS WIFI ,DDR 2GB 内存,与开源板卡系统配置保持一致。
底板按下图修改其中一块:
要 EMMC 启动的需要按下图焊上核心板,驱动一般是通用的,这里测试过 8GB 和 64GB 的不同颗粒(默认用 KLM8G1GETF-B041 ),只要能读到 EMMC 就能用,且系统空间划分都是一样的。
如何确认 EMMC 可以正常使用?使用 SD 启动底板 + 带 EMMC 颗粒的核心板启动系统使用 fdisk -l
会显示两个磁盘。
root@AXERA:~# fdisk -l
Disk /dev/mmcblk0: 7.28 GiB, 7818182656 bytes, 15269888 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mmcblk2: 58.94 GiB, 63281561600 bytes, 123596800 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x32eb5429
Device Boot Start End Sectors Size Id Type
/dev/mmcblk2p1 * 2048 264191 262144 128M c W95 FAT32 (LBA)
/dev/mmcblk2p2 264192 12058623 11794432 5.6G 83 Linux
/dev/mmcblk2p3 12058624 70586367 58527744 27.9G 83 Linux
/dev/mmcblk2p4 70586368 123596799 53010432 25.3G 7 HPFS/NTFS/exFAT
root@AXERA:~#
这里的 Disk /dev/mmcblk0: 7.28 GiB, 7818182656 bytes, 15269888 sectors
就是 EMMC 的存储了。
但这里看不到它这个磁盘的分区情况,是因为这个是恢复系统的,系统经过 ubifs 处理的,一般情况下是解不开的,当然你也可以格式化它当一般的存储空间使用。
这样我们就得到了一个 EMMC 硬件,接着需要做还原系统,经过修改后导出系统,之后提供给预烧录即可,你也可以拿多台板子做烧录器。
恢复文件系统
这里我提供了 2023年03月13日 的镜像系统制作的 ubifs 文件系统的 emmc 系统,本文稍后会迁移到 WIKI 中。
- 得到
sipeed_ax620a_debian11_emmc8g2g.img
镜像文件放进板子。
这里方法随意,我记录一下我的做法。
root@AXERA:~# mount /dev/mmcblk2p3 /mnt/
root@AXERA:~# ls /mnt/
sipeed_m3axpi_debian11_with_8g2g.img
root@AXERA:~#
- 在板子上使用
dd if=xxxx.img of=/dev/mmcblk0 bs=4M status=progress
恢复系统到 EMMC 里。
root@AXERA:~# ls /mnt/
sipeed_m3axpi_debian11_with_8g2g.img
root@AXERA:~# dd if=/mnt/sipeed_ax620a_debian11_emmc8g2g.img of=/dev/mmcblk0 bs=4M status=progress
7793016832 bytes (7.8 GB, 7.3 GiB) copied, 140 s, 55.7 MB/s
1864+0 records in
1864+0 records out
7818182656 bytes (7.8 GB, 7.3 GiB) copied, 141.442 s, 55.3 MB/s
root@AXERA:~# poweroff
- 把 核心板 换到 EMMC 启动的底板即可启动。
在产线上就是,将预烧 EMMC 贴上,底板拆电阻即可。
可以看到启动后和开源 SD 卡系统是差不多的,但不能再通过开源文档的方式进行设备树或内核的切换,此时文件系统划分如下:
root@AXERA:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 3.8G 3.3G 562M 86% /
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 626M 0 626M 0% /dev/shm
tmpfs 251M 7.2M 244M 3% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 626M 0 626M 0% /tmp
/dev/mmcblk0p7 122M 40K 120M 1% /boot
/dev/mmcblk0p8 2.0G 281M 1.7G 15% /opt
/dev/mmcblk0p6 928K 40K 788K 5% /param
tmpfs 126M 0 126M 0% /run/user/0
root@AXERA:~# fdisk -l
Disk /dev/mmcblk0: 7.28 GiB, 7818182656 bytes, 15269888 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sda: 58.94 GiB, 63281561600 bytes, 123596800 sectors
Disk model: SD Card Reader
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x32eb5429
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 264191 262144 128M c W95 FAT32 (LBA)
/dev/sda2 264192 12058623 11794432 5.6G 83 Linux
/dev/sda3 12058624 70586367 58527744 27.9G 83 Linux
/dev/sda4 70586368 123596799 53010432 25.3G 7 HPFS/NTFS/exAT
root@AXERA:~#
该系统是按 blkdevparts=mmcblk0:512K(spl),1536K(uboot),1M(env),1M(dtb),32M(kernel),5M(param),128M(soc),2048M(opt),4000M(rootfs)
制作的,而原 SD 卡槽可独立出来供其他存储用途,rootfs 路径为 root=/dev/mmcblk0p9
,因此 opt 对应 root=/dev/mmcblk0p8
。
# UNCONFIGURED FSTAB FOR BASE SYSTEM
# <file system> <mount pt> <type> <options> <dump> <pass>
/dev/root / ext2 rw,noauto 0 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts defaults,gid=5,mode=620,ptmxmode=0666 0 0
tmpfs /dev/shm tmpfs mode=0777 0 0
tmpfs /tmp tmpfs mode=1777 0 0
tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0
sysfs /sys sysfs defaults 0 0
#/dev/mmcblk2p1 /boot vfat noatime,nodiratime,discard 0 0
/dev/mmcblk0p6 /param ext4 noatime,nodiratime,discard 0 0
/dev/mmcblk0p7 /boot ext4 noatime,nodiratime 0 0
/dev/mmcblk0p8 /opt ext4 noatime,nodiratime,discard 0 0
在 /etc/fstab 里原 boot 目录连接到 /dev/mmcblk0p7
分区可做程序配置 OTA 用途,不再支持设备树、内核、引导升级用途,而 /dev/mmcblk0p8
连接 opt 分区给原厂驱动模型,其他分区说明暂无,凭直觉里可以认为 kernel 分区对应内核文件。
导出文件系统
注意:在 SD 卡启动的系统里是获取不到 EMMC 系统的文件的,所以修改文件只能在 EMMC 系统上。
在 EMMC 是不能直接读到 SD 卡槽上的系统卡的,这里推荐采用 OTG U 盘的方式或另外一张只有一个分区为 FAT 或 EXT4 的 SD 卡。
root@AXERA:~# fdisk -l
Disk /dev/mmcblk0: 7.28 GiB, 7818182656 bytes, 15269888 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mmcblk2: 480 MiB, 503316480 bytes, 983040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7e57471f
Device Boot Start End Sectors Size Id Type
/dev/mmcblk2p1 2048 983039 980992 479M 83 Linux
Disk /dev/sda: 58.94 GiB, 63281561600 bytes, 123596800 sectors
Disk model: SD Card Reader
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x32eb5429
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 264191 262144 128M c W95 FAT32 (LBA)
/dev/sda2 264192 12058623 11794432 5.6G 83 Linux
/dev/sda3 12058624 70586367 58527744 27.9G 83 Linux
/dev/sda4 70586368 123596799 53010432 25.3G 7 HPFS/NTFS/exFAT
root@AXERA:~#
这里推荐用读卡器直接对拷 SD 系统更新的内容,修改完成后确认一下外部拓展存储区域(/dev/sda3)选择导出到 U 盘 或 SD 卡。
root@AXERA:~# mount /dev/sda2 /mnt
root@AXERA:~# ls /mnt/ -l
total 76
lrwxrwxrwx 1 root root 7 Aug 4 2022 bin -> usr/bin
drwx------ 2 root root 4096 Aug 4 2022 boot
-rwxr-xr-x 1 root root 11 Aug 4 2022 debuerreotype-epoch
drwxr-xr-x 4 root root 4096 Oct 19 07:56 dev
drwxr-xr-x 90 root root 4096 Feb 13 02:20 etc
drwxr-xr-x 15 root root 4096 Feb 17 02:29 home
lrwxrwxrwx 1 root root 7 Aug 4 2022 lib -> usr/lib
drwx------ 2 root root 4096 Aug 19 2022 lost+found
drwxr-xr-x 2 root root 4096 Aug 4 2022 media
drwxr-xr-x 2 root root 4096 Aug 4 2022 mnt
drwxrwxr-x 10 root root 4096 Oct 17 07:48 opt
drwxr-xr-x 2 root root 4096 Aug 4 2022 param
drwxr-xr-x 2 root root 4096 Aug 4 2022 proc
drwxr-xr-x 7 root root 4096 Mar 17 10:07 root
drwxr-xr-x 7 root root 4096 Oct 19 07:56 run
lrwxrwxrwx 1 root root 8 Aug 4 2022 sbin -> usr/sbin
lrwxrwxrwx 1 root root 4 Nov 10 03:06 soc -> /opt
drwxr-xr-x 2 root root 4096 Aug 4 2022 srv
drwxr-xr-x 2 root root 4096 Aug 4 2022 sys
drwxr-xr-x 2 root root 4096 Mar 20 2022 test
drwxr-xr-x 2 root root 4096 Mar 13 06:43 tmp
drwxr-xr-x 11 root root 4096 Aug 4 2022 usr
drwxr-xr-x 11 root root 4096 Aug 4 2022 var
root@AXERA:~# mount
/dev/mmcblk0p6 on / type ext4 (rw,relatime)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,noexec,size=4096k,nr_inodes=65536,mode=755)
tmpfs on /dev/shm type tmpfs (rw)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=666)
tmpfs on /run type tmpfs (rw,nosuid,nodev,size=256304k,nr_inodes=819200,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
tracefs on /sys/kernel/tracing type tracefs (rw,nosuid,nodev,noexec,relatime)
configfs on /sys/kernel/config type configfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /tmp type tmpfs (rw,relatime)
/dev/sda2 on /mnt type ext4 (rw,relatime)
root@AXERA:~#
- 使用
mount /dev/sda3 /mnt/
挂载分区,注意/dev/sda3
从fdisk -l
得知,这里我使用的是 U 盘挂载的方式。
root@AXERA:~# mount /dev/sda3 /mnt/
root@AXERA:~# ls /mnt/
lost+found/
sipeed_ax620a_debian11_emmc8g2g.img
dd if=/dev/mmcblk0 of=/mnt/sipeed_ax620a_debian11_emmc8g2g.img bs=64M status=progress
root@AXERA:~# dd if=/dev/mmcblk0 of=/mnt/sipeed_ax620a_debian11_emmc8g2g.img bs=64M status=progressmg bs=64M status=progress
7818182656 bytes (7.8 GB, 7.3 GiB) copied, 213 s, 36.7 MB/s
116+1 records in
116+1 records out
7818182656 bytes (7.8 GB, 7.3 GiB) copied, 213.799 s, 36.6 MB/s
root@AXERA:~# ls -l /mnt
total 15679308
-rw-r--r-- 1 1000 1000 419218267 Mar 27 03:41 AX620_demo_V0.31.0_P23_20220708101907_20230327113924.axp
-rw-r--r-- 1 root root 7818182656 Mar 27 06:28 backup.img
drwx------ 2 root root 16384 Mar 27 06:00 lost+found
-rw-r--r-- 1 root root 7818182656 Mar 28 11:09 sipeed_ax620a_debian11_emmc8g2g.img
root@AXERA:~#
这样你就得到了我提供的 sipeed_ax620a_debian11_emmc8g2g.img 系统了喔!是不是很简单呢,直接还原回去就行。
后记:局限性和优越性
局限性就在于这样做在更换到更大的 EMMC 64GB的时候也不会自动扩容,也不支持随意修改 2G 内存大小,调整这些需要重新制作镜像,除非跟爱芯签了 SDK 源码资料自行编译开发,否则你只能基于这套核心板硬件进行开发,换来的是用于量产更可靠的 ubifs 存储系统,关于 ubifs 是什么自行百度。
优越性主要体现在批量生产烧录的时候,不再被工具限制,可以通过更多硬件完成批量生产,使用 debian 开发可以脱离 SDK 源码进行软件或模型的二次更新,拥有更完整的 linux 开发系统的,体验感拉满。
如果你更改了物料或外设驱动?很需要帮助?请通过企业直接发邮件到 support@sipeed.com 公司请求开案定制生产。
最后吐槽一下制作这东西巨麻烦,建议没事别折腾!(无奈┓( ´∀` )┏)