|
本帖最后由 achaoge 于 2022-5-11 11:27 编辑
有几个吃灰的赚钱宝,跟着论坛里面的教程,折腾了一下,踩了一些坑,随手记录一下。
硬件:S805、512M内存,4G emmc存储,大致硬件跟 odroidc1 类似,还有文档可以参考。
参考文档:
论坛: 【赚钱宝2代 Armbian 直刷包】软件随便装,可以apt-get,可以挂甜糖~
自行编译5.10镜像:https://soulteary.com/2021/11/10/low-power-device-trial-notes-wyk-part-1.html
内核3.10.108 的编译: github 3.10.108镜像资源
测试的结果:
1,3.10.108 内核可以运行(也可以自行编译内核及需要的模块,拿了来做打印服务器,所以加了usblp 模块,可以网络打印),各个硬件的功能模块都没有问题。
2,5.10.21 的内核可以运行(来源Armbian的 odroidc1 镜像,或者 dietpi 的 odroidc1),因为没有原厂的 dtb文件(5.10 用了 meson8b-ec100.dtb),所以这个版本上USB不可用,其它能看到的比如led灯、网络等等可以用,如果不纠结usb口的话,这个版本的可玩性应该高一些。
3,可以刷入 odroidc1 的 u-boot.bin 模块,替换原厂的uboot,这个模式下的uboot 可以启动 fastboot 和 ums,方便救砖用(踩了无数坑的血泪),但这个uboot 下网络不正常;也可以自行编译 odroidc1 的uboot,以便于网卡正常工作,但无论哪个Uboot,都不能正常使用U盘,所以无法实现U盘启动。
4,原始的uboot 下,只能读取类似 android 的 boot.img 来启动,好在有 kernel\uboot\misc\boot 等分区供使用,所以把boot.img 文件写入这些分区,并修改uboot 环境变量就可以实现启动不同的内核版本(也就是说可以保留原始的版本,多系统共存,虽然对于4G的存储来说并没有什么鸟用)
5,5.10 的内核不能识别原始uboot 的分区,解决办法是用 odroidc1 的uboot 进行分区;并且odroid uboot 的好处是可以直接读取 ext4 分区的文件进行引导; 如果用原始uboot 又想引导5.10,也有两个选项:
5.1 用 fdisk 给emmc分区,为避免分区混乱,需要参考分区表、16进制和10进制转换,以及 blocksize 的大小。这里注意分区最好是在3.10内核下做(血泪:5.10 下分的区给文件系统添加了一些标记,导致3.10的内核无法挂载,最后参考了前面说的 uboot下启动 ums ,利用外部的电脑去掉了文件系统的特定功能才好)
5.2 给内核启动的参数加 blkdevparts,当然还需要内核开启了相应的开关,这个参数也需要自己计算大小、位移。
6 替换uboot: 注意!注意!注意!换uboot 的前提是你有 ttl线并已经完成了拆机!在Linux系统下:先取消uboot分区的强制写标记,再写入 u-boot.
echo 0 > /sys/block/mmcblk1boot0/force_ro
dd if=u-boot.bin of=/dev/mmcblk1boot0 bs=512 seek=64
7 Linux下查看和修改 uboot 变量,以实现多系统启动的命令是 fw_printenv, fw_setenv,注意 odroid 和原厂 的uboot 分区表并不一致,所以 env 分区位置不一样,使用命令的时候注意修改相应的配置文件。(顺便说一句,原厂的uboot 支持 tftp 引导,所以我还尝试过如果接上网络,就从网络下载引导文件启动;如果没有,就从自身的emmc引导启动)
最后设备安安心心的安装了 dietpi 加上 cups ,在3.10.108内核下当作了打印服务器。
附一下原始的分区表及uboot变量:
Partition table get from SPL is :
name offset size flag
=================================================================================
==
0: bootloader 0 400000 0
1: reserved 2400000 4000000 0
2: cache 6c00000 0 0
3: env 7400000 800000 0
4: uboot 8400000 2000000 1
5: kernel ac00000 2000000 1
6: misc d400000 2000000 1
7: boot fc00000 2000000 1
8: system 12400000 10000000 1
9: backup 22c00000 10000000 1
10: data 33400000 b5c00000 4
==========原始uboot参数============
stat /dev/nand_env OK
env device is /dev/nand_env erasesize=(0x00000) envsize=(0x10000)
baudrate=115200
boardname=m8_board
bootargs=root=/dev/system rootfstype=ext4 init=/sbin/init console=ttyS0,115200n8 no_console_suspend ramoops.mem_address=0x04e00000 ramoops.mem_size=0x100000 ramoops.record_size=0x8000 ramoops.console_size=0x4000 cvbsdrv=0 vdaccfg=0xa000 logo=osd1,loaded,0x7900000,1080p,full hdmimode=1080p cvbsmode=576cvbs androidboot.firstboot=1 hdmitx=
bootcmd=run storeboot
bootdelay=1
bootfile=boot.img
bootm_low=0x00000000
bootm_size=0x80000000
bootpart=kernel
bootpath=u-boot.bin
bootrecovery=run revertbootpart; run storeboot
bootsize=100000
bootstart=0
check_rebootmode=get_rebootmode; clear_rebootmode; echo reboot_mode=${reboot_mode};if test ${reboot_mode} = factory_reset; then defenv; fi;
checkbootpart=if test ${second_image_load} = off; then setenv bootpart boot;else if test ${second_image_load} = on; then setenv bootpart kernel; fi;fi;
checkrootfspart=if test ${second_rootfs_load} = off; then setenv rootfs_part system;else if test ${second_rootfs_load} = on; then setenv rootfs_part backup; fi;fi;
chipname=8726m8
console=ttyS0,115200n8 ignore_loglevel
cvbs_drv=0
cvbsmode=576cvbs
display_bpp=16
display_color_bg=0
display_color_fg=0xffff
display_color_format_index=16
display_height=1080
display_layer=osd2
display_width=1920
enable_halt=0
ethact=Meson_Ethernet
ethaddr=00:15:18:01:81:31
fb_addr=0x7900000
fb_height=1080
fb_width=1920
firstboot=1
gatewayip=10.18.9.1
get_dt=checkhw
hdmimode=1080p
hostname=arm_m8
identifyWaitTime=750
initargs=root=/dev/system rootfstype=ext4 init=/sbin/init console=ttyS0,115200n8 no_console_suspend ramoops.mem_address=0x04e00000 ramoops.mem_size=0x100000 ramoops.record_size=0x8000 ramoops.console_size=0x4000
initrd_high=60000000
ipaddr=10.18.9.97
loadaddr=0x12000000
loadaddr_logo=0x13000000
netmask=255.255.255.0
normalsize=400000
normalstart=1000000
outputmode=1080p
p0path=uImage
p0size=400000
p0start=1000000
p1path=android.rootfs
p1size=8000000
p1start=1400000
partnum=2
preboot=run test_facreset;if itest ${upgrade_step} == 3; then run prepare; run storeargs; run update; fi; if itest ${upgrade_step} == 1; then defenv_reserve_env; setenv upgrade_step 2; saveenv;fi; run check_rebootmode;run prepare;run storeargs;run update_ir; run switch_bootmode
preloaddtb=imgread dtb boot ${loadaddr}
prepare=logo size ${outputmode}; video open; video clear; video dev open ${outputmode};imgread pic logo bootup ${loadaddr_logo}; bmp display ${bootup_offset}; bmp scale;
reboot_mode=normal
recovery=echo enter recovery;setenv bootargs ${bootargs} wipeinstaboot;if mmcinfo; then if fatload mmc 0 ${loadaddr} recovery.img; then bootm;fi;fi; if usb start 0; then if fatload usb 0 ${loadaddr} recovery.img; then bootm; fi;fi;if imgread kernel recovery ${loadaddr}; then bootm; else echo no recovery in flash; fi;
resetinitargs=setenv initargs root=/dev/${rootfs_part} rootfstype=ext4 init=/sbin/init console=ttyS0,115200n8 no_console_suspend ramoops.mem_address=0x04e00000 ramoops.mem_size=0x100000 ramoops.record_size=0x8000 ramoops.console_size=0x4000
revertbootpart=if test ${second_image_load} = off; then setenv second_image_load on; else if test ${second_image_load} = on;then setenv second_image_load off; fi; fi; saveenv
rootfs_part=system
sdc_burning=sdc_burn ${sdcburncfg}
sdcburncfg=aml_sdc_burn.ini
second_image_load=on
second_rootfs_load=off
serverip=10.18.9.113
stderr=serial
stdin=serial
stdout=serial
stop_dcdn=0
store=1
storeargs=setenv bootargs ${initargs} cvbsdrv=${cvbs_drv} vdaccfg=${vdac_config} logo=osd1,loaded,${fb_addr},${outputmode},full hdmimode=${hdmimode} cvbsmode=${cvbsmode} androidboot.firstboot=${firstboot} hdmitx=${cecconfig}
storeboot=if test ${reboot_mode} = charging; then run try_auto_burn; fi;echo Booting...; run checkbootpart; run checkrootfspart; run resetinitargs; run storeargs;save; if unifykey get usid; then setenv bootargs ${bootargs} androidboot.serialno=${usid};fi;if unifykey get mac; then setenv bootargs ${bootargs} mac=${mac};fi;imgread kernel ${bootpart} ${loadaddr};bootm;run bootrecovery
switch_bootmode=if test ${reboot_mode} = factory_reset; then run recovery;else if test ${reboot_mode} = update; then run update;else if test ${reboot_mode} = usb_burning; then run usb_burning;else if test ${wipe_data} = failed; then echo wipe_data=${wipe_data}; run recovery;else fi;fi;fi;fi
test_facreset=if test ${wipe_data} = failed; then echo -wipe_data=${wipe_data}; run prepare; run storeargs; run recovery;fi; if test ${wipe_cache} = failed; then echo -wipe_cache=${wipe_cache}; run prepare; run storeargs; run recovery;fi;
testaddr=0x12400000
try_auto_burn=update 700 750;
update=run usb_burning; if mmcinfo; then if fatexist mmc 0 ${sdcburncfg}; then run sdc_burning; else if fatload mmc 0 ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi;run recovery;fi;else run recovery;fi;
update_ir=if irdetect; then run update; fi
upgrade_step=2
usb_burning=update 1000
vdac_config=0xa000
video_dev=tvout
wipe_cache=success
wipe_data=success
xl_default=1
xl_kernel_ver=V1.2.138
xl_plug_init=1
xl_softmode=usermode
|
|