[m3axpi] 關於 愛芯 ax620a 方案 如何 採用 EMMC 商業化 量產 成品 這件事

廣告

練習時長兩年半(不是),一顆 3.6TOPs@INT8 大算力低功耗超強夜景的芯片總算是來到了 MAIX-III Linux AI 系列!

image

沒錯,它就是來自「愛芯元智」的 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 體驗!(來自官方)

image

如果你想分享這款 AI 開發板給其他同學瞭解,請使用唯一的傳送門「 wiki.sipeed.com/m3axpi 」。

前言

最近羣裏有很多小夥伴說需要 EMMC 做商業方案,所以我抽空處理了一下這個問題。

在我這裏不推薦使用原廠燒錄工具進行 EMMC 的量產,原廠燒錄工具存在的問題是隻支持 Windows 系統使用 USB OTG 線燒,不支持腳本化自動燒錄。

這裏我採用 DD 方案就整盤對拷解決問題,燒錄主要是可以在外部預燒錄一些東西,雖然說這在系統上電後也能實現,但硬件總是要上電出廠驗證才能發貨的嘛。

準備工作

兩套 愛芯派 底板 加 核心板,加上一張 debian 系統 SD 卡,一顆大於 8GB 的 EMMC 顆粒。

最新物料爲 LCD20221025 854x480 MIPI 屏幕,以及 RTL8189FS WIFI ,DDR 2GB 內存,與開源板卡系統配置保持一致。

底板按下圖修改其中一塊:

image

要 EMMC 啓動的需要按下圖焊上核心板,驅動一般是通用的,這裏測試過 8GB 和 64GB 的不同顆粒(默認用 KLM8G1GETF-B041 )。

image

如何確認 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 中。

  1. 得到 sipeed_m3axpi_debian11_emmc_20230329.img 鏡像文件放進板子。

  2. 在板子上使用 dd if=sipeed_m3axpi_debian11_emmc_20230329 of=/dev/mmcblk0 bs=4M status=progress 恢復系統到 EMMC 裏。

  3. 把 核心板 換到 EMMC 啓動的底板即可啓動。

在產線上就是,將預燒 EMMC 貼上,底板拆電阻即可。

可以看到啓動後和開源 SD 卡系統是差不多的,但不能再通過開源文檔的方式進行設備樹或內核的切換,此時文件系統劃分如下:


該系統是按 blkdevparts=mmcblk0:512K(spl),1536K(uboot),1M(env),1M(dtb),32M(kernel),5M(param),128M(soc),2048M(opt),4096M(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 目錄連接到 soc 分區可做程序 OTA 用途,而 opt 連接 opt 分區給原廠驅動模型,但 /boot 分區不再支持設備樹、內核、uboot 升級用途,只提供配置項目存儲用途。其他分區說明暫無,憑直覺裏可以認爲 kernel 分區對應內核文件。

導出文件系統

注意:在 SD 卡啓動的系統裏是獲取不到 EMMC 系統的文件的,所以修改文件只能在 EMMC 系統上。

在 EMMC 是不能直接讀到 SD 卡槽上的系統卡的,這裏推薦採用 OTG U 盤的方式或另外一張只有一個分區爲 FAT 或 EXT4 的 SD 卡。

image

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:~# 
  1. 使用 mount /dev/sda3 /mnt/ 掛載分區,注意 /dev/sda3fdisk -l 得知,這裏我使用的是 U 盤掛載的方式。
root@AXERA:~# mount /dev/sda3 /mnt/
root@AXERA:~# ls /mnt/
AX620_demo_V0.31.0_P23_20220708101907_20230327113924.axp
backup.img
lost+found/
sipeed_m3axpi_debian11_with_8g2g.img
  1. dd if=/dev/mmcblk0 of=/mnt/sipeed_m3axpi_debian11_with_8g2g.img bs=64M status=progress
root@AXERA:~# dd if=/dev/mmcblk0 of=/mnt/sipeed_m3axpi_debian11_with_8g2g.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_m3axpi_debian11_with_8g2g.img
root@AXERA:~# 

這樣你就得到了我提供的 sipeed_m3axpi_debian11_emmc_20230329.img 喔!是不是很簡單呢,在其他芯片上直接還原回去就行。

後記:侷限性和優越性

侷限性就在於這樣做在更換到更大的 EMMC 區域的時候不會自動擴容,也不支持隨意修改內存大小,這都需要重新制作鏡像,除非跟愛芯簽了 SDK 源碼資料自行編譯開發,否則你只能基於這套核心板硬件進行開發,換來的是用於量產更可靠的存儲系統,關於 ubifs 是什麼自行百度。

優越性主要體現在批量生產燒錄的時候,不再被工具限制,可以通過更多硬件完成批量生產,使用 debian 開發可以脫離 SDK 源碼進行軟件或模型的二次更新,擁有更完整的 linux 開發系統的,體驗感拉滿。

如果你更改了物料或外設驅動?很需要幫助?請通過企業直接發郵件到 [email protected] 公司請求開案定製生產。

最後吐槽一下製作這東西巨麻煩,建議沒事別折騰!(無奈┓( ´∀` )┏)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章