技术分享
🗒️记录Hi3796mv100移植Linux全过程
00 分钟
2023-6-27
2023-6-28
type
status
date
slug
summary
tags
category
password
icon

基本概况

Hi3798mv100为wahway出品的一款面向stb的soc芯片,网上有流出的android或linux sdk,型号形如HiSTBAndroidV600R003C01或HiSTBLinuxV100R005C00SPC041B020。目前可找的的最新linux sdk为4.4.35的HiSTBLinuxV100R005C00SPC050。

引导程序

fastboot大概就是uboot换皮,但由于这款芯片主要面向stb市场,所以他确实支持fastboot协议。
接ttl后所谓按ctrl c中断启动从未成功,若有人成功烦请告知。
短接J16从U盘读取fastboot.bin(fastboot随后读取bootargs.bin、recovery.img)引导。
引导参数中除了blkdevparts规定了mmc分区外,另一个有用的参数是mmz=ddr,0,0,400M指定了gpu内存,此内存将被gpu kmod划走从而kernel无法使用。读源代码发现bootargs中的blkdevparts可能规定了fastboot分区,但由于我是高安版从而无法验证。
破解高安版详看上一贴。

userspace

fastboot可接受的启动格式为
可以使用命令mkimage -A arm -O linux -T kernel -C none -a 0X2000000 -e 0X2000000 -n <name> -d zImage-dtb uImagemkbootimg --kernel uImage --ramdisk ramdisk.cpio.xz --base 0 --kernel_offset 0x3e08000 --ramdisk_offset 0x4e00000 -o recovery.img制作。地址其实可以不同,但我没datashit因此无法准确验证。
制作initramfs的方式
find . -print0 | cpio --null --create --verbose --format=newc > ramdisk.cpio
gzip -9 < ramdisk.cpio > ramdisk.cpio.gz
xz --check=crc32 -T0 -9 < ramdisk.cpio > ramdisk.cpio.xz
没有ramdisk去 https://mirrors.ustc.edu.cn/openwrt/releases/22.03.3/targets/armvirt/32/ 偷,注意下rootfs.cpio.gzrootfs-ext4.img.gz会假设rootfs为持久存储,然后就会写入第一次配置后重启。
支持的文件系统:

使用sdk

去 https://github.com/tegzwn/HiSTBLinuxV100R005C00SPC050 下载sdk。我们主要是要out/hi3798mv100/hi3798mdmo1g/obj/source/kernel/linux-4.4.y/.config,有这个文件就可以退出了。
source/kernel/linux-4.4.y移动出来,塞进.config后执行以下命令编译:
要上gcc 12需要打以下补丁:
参考:https://www.frostsnow.net/blog/2019-05-07.html
注意有时需要参考 https://github.com/glinuz/hi3798mv100 的linux-3.18.y。wahway自己代码都能写糊(例如ir驱动),令人汗颜。
menuconfig提示:
  • 可以选择General setup -> Kernel compression mode -> XZ
  • 选上CONFIG_USB_EHCI_HCD_PLATFORM=yCONFIG_USB_OHCI_HCD_PLATFORM=y!!!不然开机找不到usb设备。
拿到arch/arm/boot/zImage-dtb即可组装uImagebootimg

重放到4.4.35

主要的改动在arch/armdrivers/hisilicondrivers/net/nanddrivers/mtddrivers/netinclude/dt-bindings/clockinclude/linux/hisilicondrivers/usb/gadget/udc/hiudc为hisi usb sysfs接口,drivers/commondrivers/msp为gpu驱动,drivers/bluetooth_usbdrivers/wifi为rtlwifi驱动,可删除(另,闭源驱动无法修改mac,使用nm需关闭随机化mac扫描功能)。
注意drivers/mmc/card/block.c为mmc添加了GENHD_FL_EXT_DEVT,因此可以突破CONFIG_MMC_BLOCK_MINORS默认8的限制(否则mmc part只能识别到7),解决方法建议暂时调大CONFIG_MMC_BLOCK_MINORS
自此我们拿到了距主线差距最小的补丁集,接下来就是...

升级!

4.5

int *irq;变成了int irq[PHY_MAX_ADDR];,删除即可。
不会弄,先删除。

4.7

删除。
删除。
改成netif_trans_update(dev);
删除。
 
 
致谢:
💡
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
 
 

评论