Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于启动脚本 #3

Closed
indiboy opened this issue Jun 3, 2022 · 28 comments
Closed

关于启动脚本 #3

indiboy opened this issue Jun 3, 2022 · 28 comments

Comments

@indiboy
Copy link

indiboy commented Jun 3, 2022

powersee的玩客云固件算是很完善的固件了,就是不是最新版,用起来很好,但是想要一个可以编译的最新的固件
您看是否有值得参考的地方。
https://powersee.github.io/2021/01/wankeyun-server/
https://powersee.github.io/2021/02/wankeyun-2/

@lbbboy
Copy link

lbbboy commented Jun 3, 2022

就是不是最新版,用起来很好,但是想要一个可以编译的最新的固件 您看是否有值得参考的地方。 https://powersee.github.io/2021/01/wankeyun-server/ https://powersee.github.io/2021/02/wankeyun-2/

完全没必要这些功能都可以自己装。

@indiboy
Copy link
Author

indiboy commented Jun 3, 2022

不是这个意思,问题是,你的这个固件刷进U盘没办法引导啊?

@indiboy
Copy link
Author

indiboy commented Jun 3, 2022

他的这个固件,刷进U盘可以直接进U盘系统的,不插U盘进的是EMMC,不知道是不是我下载的有问题,还是操作不对,你的这个是引导不了的,直接进EMMC的系统了。

@hzyitc
Copy link
Owner

hzyitc commented Jun 3, 2022

他的这个固件,刷进U盘可以直接进U盘系统的,不插U盘进的是EMMC,不知道是不是我下载的有问题,还是操作不对,你的这个是引导不了的,直接进EMMC的系统了。

参考README_zh.md,里面有介绍u-boot引导方法。

不添加通用引导脚本的原因我也写在README里面了。

他这个固件我看看他的引导脚本吧

@indiboy
Copy link
Author

indiboy commented Jun 3, 2022

非常感谢,建议做的更简单一些,比如说直接刷进U盘,就可以引导,然后就是写入EMMC,之后插U盘还是进U盘系统。
比如说做复古游戏机等等,又不会影响Emmc本身的系统,加入以下LED控制,能关灯,省点电等这些小功能,就比较好了,毕竟玩客云这个硬件还是很好玩的,唯一遗憾就是32位系统,不过64位的话价格也应该上去了。

@hzyitc
Copy link
Owner

hzyitc commented Jun 3, 2022

引导问题README写了

由于U-Boot中并没有提供可以判断当前引导设备的方法,我暂时想不出通用启动脚本的写法。
当然也可以按照一定的顺序尝试启动,但我认为这可能造成用户困惑。
比如,用户运行了eMMC上的启动脚本,但默认尝试顺序却是先尝试USB,因此启动了USB上的内核
因此,在我没找到合适的方法前,暂时不会提交到官方仓库

他的固件也是采用我说的按一定的顺序引导,我的观点就是,这更加造成用户困惑。

其次,本仓库的主要目的是让armbian官方支持,而不是客制化。系统是armbian官方原系统

LED控制也有,采用Linux原版控制方法,具体路径在/sys/class/leds/

省电问题还在研究,具体看 #1 。我个人认为可能做不到。由于电路设计上,SoC的电压是固定死的,而不是可调节的。即使降频也没法降压。

@soulant
Copy link

soulant commented Jun 3, 2022

玩客云因uboot缺少sysboot命令无法引导extlinux.conf,故只能采用*.scr脚本或参数直接引导,建议使用150balbes中的引导方式:
e.g. Armbian_21.02.0-trunk_Aml-s812_bionic_current_5.10.0_.img.xz
uboot env + s805_autoscript(emmc_autoscript) + uEnv.txt(uEnv.ini)

对于mmc 因搞不明白有时到底是0 还是1,可以多添加一行mmc 1

@hzyitc
Copy link
Owner

hzyitc commented Jun 3, 2022

玩客云因uboot缺少sysboot命令无法引导extlinux.conf,故只能采用*.scr脚本或参数直接引导,建议使用150balbes中的引导方式: e.g. Armbian_21.02.0-trunk_Aml-s812_bionic_current_5.10.0_.img.xz uboot env + s805_autoscript(emmc_autoscript) + uEnv.txt(uEnv.ini)

对于mmc 因搞不明白有时到底是0 还是1,可以多添加一行mmc 1

不是如何引导的问题,而是如何准确引导。让eMMC上的引导脚本引导eMMC上的系统,USB上的引导脚本引导USB上的系统。

目前,我所找到的引导脚本都是尝试顺序引导,即,先判断USB上有没有uEnv.txt有就引导USB,没有再判断eMMC上有没有。

这就导致,当同时在eMMCUSB上刷入armbian,由于只能按一定的顺序尝试引导,最终导致进入错误的系统。

@soulant
Copy link

soulant commented Jun 3, 2022

玩客云因uboot缺少sysboot命令无法引导extlinux.conf,故只能采用*.scr脚本或参数直接引导,建议使用150balbes中的引导方式: e.g. Armbian_21.02.0-trunk_Aml-s812_bionic_current_5.10.0_.img.xz uboot env + s805_autoscript(emmc_autoscript) + uEnv.txt(uEnv.ini)
对于mmc 因搞不明白有时到底是0 还是1,可以多添加一行mmc 1

不是如何引导的问题,而是如何准确引导。让eMMC上的引导脚本引导eMMC上的系统,USB上的引导脚本引导USB上的系统。

目前,我所找到的引导脚本都是尝试顺序引导,即,先判断USB上有没有uEnv.txt有就引导USB,没有再判断eMMC上有没有。

这就导致,当同时在eMMCUSB上刷入armbian,由于只能按一定的顺序尝试引导,最终导致进入错误的系统。

如果要精准引导,你可以先检测所有Device上的uEnv.txt 或自定义其它判断标记,如果全部存在,优先从EMMC引导尝试,如果非EMMC存在,在按检测顺序执行

@hzyitc
Copy link
Owner

hzyitc commented Jun 3, 2022

玩客云因uboot缺少sysboot命令无法引导extlinux.conf,故只能采用*.scr脚本或参数直接引导,建议使用150balbes中的引导方式: e.g. Armbian_21.02.0-trunk_Aml-s812_bionic_current_5.10.0_.img.xz uboot env + s805_autoscript(emmc_autoscript) + uEnv.txt(uEnv.ini)
对于mmc 因搞不明白有时到底是0 还是1,可以多添加一行mmc 1

不是如何引导的问题,而是如何准确引导。让eMMC上的引导脚本引导eMMC上的系统,USB上的引导脚本引导USB上的系统。
目前,我所找到的引导脚本都是尝试顺序引导,即,先判断USB上有没有uEnv.txt有就引导USB,没有再判断eMMC上有没有。
这就导致,当同时在eMMCUSB上刷入armbian,由于只能按一定的顺序尝试引导,最终导致进入错误的系统。

如果要精准引导,你可以先检测所有Device上的uEnv.txt 或自定义其它判断标记,如果全部存在,优先从EMMC引导尝试,如果非EMMC存在,在按检测顺序执行

我也是这样想的,检测特定标识,但如果想区分两个armbian的话,那么就需要修改编译脚本加入更多选项了。但由于meson已经EOF了,官方大概率不会接受这个修改

@soulant
Copy link

soulant commented Jun 3, 2022

官方开发板,默认基本采用boot.ini引导,估计不会接受其它引导变量

@soulant
Copy link

soulant commented Jun 3, 2022

玩客云因uboot缺少sysboot命令无法引导extlinux.conf,故只能采用*.scr脚本或参数直接引导,建议使用150balbes中的引导方式: e.g. Armbian_21.02.0-trunk_Aml-s812_bionic_current_5.10.0_.img.xz uboot env + s805_autoscript(emmc_autoscript) + uEnv.txt(uEnv.ini)
对于mmc 因搞不明白有时到底是0 还是1,可以多添加一行mmc 1

不是如何引导的问题,而是如何准确引导。让eMMC上的引导脚本引导eMMC上的系统,USB上的引导脚本引导USB上的系统。
目前,我所找到的引导脚本都是尝试顺序引导,即,先判断USB上有没有uEnv.txt有就引导USB,没有再判断eMMC上有没有。
这就导致,当同时在eMMCUSB上刷入armbian,由于只能按一定的顺序尝试引导,最终导致进入错误的系统。

如果要精准引导,你可以先检测所有Device上的uEnv.txt 或自定义其它判断标记,如果全部存在,优先从EMMC引导尝试,如果非EMMC存在,在按检测顺序执行

我也是这样想的,检测特定标识,但如果想区分两个armbian的话,那么就需要修改编译脚本加入更多选项了。但由于meson已经EOF了,官方大概率不会接受这个修改

我感觉可以直接将eMMC 作为第一启动,引导脚本和环境变量都设置为第一启动,这样就不存在启动eMMC脚本去启动其它设备了,当在uboot指定启动USB时,任然会加载eMMC,但是默认参数是先启动eMMC,自然就不会先启动USB, 如此引导脚本就不会误启动其它设备

uboot引导检测设备时,这个有先后顺序,不可能随机启动,自然也就可以在设备启动时增加setenv checkdev XXX,这样后面引导脚本就可根据前面的$chekdev来判断启动设备,这样就无需引导脚本再去随机判断USB1 USB2,但这里最终问题是uboot 环境变量启动时必须定义启动顺序,不能随机启动。

当然如果能让uboot启动顺序变为随机启动,上面的方法任可启动随机启动设备,但如何让uboot变为随机启动,我感觉这个有难度,因为uboot命令都是些基本命令

@hzyitc
Copy link
Owner

hzyitc commented Jun 3, 2022

玩客云因uboot缺少sysboot命令无法引导extlinux.conf,故只能采用*.scr脚本或参数直接引导,建议使用150balbes中的引导方式: e.g. Armbian_21.02.0-trunk_Aml-s812_bionic_current_5.10.0_.img.xz uboot env + s805_autoscript(emmc_autoscript) + uEnv.txt(uEnv.ini)
对于mmc 因搞不明白有时到底是0 还是1,可以多添加一行mmc 1

不是如何引导的问题,而是如何准确引导。让eMMC上的引导脚本引导eMMC上的系统,USB上的引导脚本引导USB上的系统。
目前,我所找到的引导脚本都是尝试顺序引导,即,先判断USB上有没有uEnv.txt有就引导USB,没有再判断eMMC上有没有。
这就导致,当同时在eMMCUSB上刷入armbian,由于只能按一定的顺序尝试引导,最终导致进入错误的系统。

如果要精准引导,你可以先检测所有Device上的uEnv.txt 或自定义其它判断标记,如果全部存在,优先从EMMC引导尝试,如果非EMMC存在,在按检测顺序执行

我也是这样想的,检测特定标识,但如果想区分两个armbian的话,那么就需要修改编译脚本加入更多选项了。但由于meson已经EOF了,官方大概率不会接受这个修改

我感觉可以直接将eMMC 作为第一启动,引导脚本和环境变量都设置为第一启动,这样就不存在启动eMMC脚本去启动其它设备了,当在uboot指定启动USB时,任然会加载eMMC,但是默认参数是先启动eMMC,自然就不会先启动USB, 如此引导脚本就不会误启动其它设备

uboot引导检测设备时,这个有先后顺序,不可能随机启动,自然也就可以在设备启动时增加setenv checkdev XXX,这样后面引导脚本就可根据前面的$chekdev来判断启动设备,这样就无需引导脚本再去随机判断USB1 USB2,但这里最终问题是uboot 环境变量启动时必须定义启动顺序,不能随机启动。

当然如果能让uboot启动顺序变为随机启动,上面的方法任可启动随机启动设备,但如何让uboot变为随机启动,我感觉这个有难度,因为uboot命令都是些基本命令

其实这个提交就是这个思路,但大部分用户在运行脚本前都不会主动的去设置这个变量

@soulant
Copy link

soulant commented Jun 4, 2022

玩客云因uboot缺少sysboot命令无法引导extlinux.conf,故只能采用*.scr脚本或参数直接引导,建议使用150balbes中的引导方式: e.g. Armbian_21.02.0-trunk_Aml-s812_bionic_current_5.10.0_.img.xz uboot env + s805_autoscript(emmc_autoscript) + uEnv.txt(uEnv.ini)
对于mmc 因搞不明白有时到底是0 还是1,可以多添加一行mmc 1

不是如何引导的问题,而是如何准确引导。让eMMC上的引导脚本引导eMMC上的系统,USB上的引导脚本引导USB上的系统。
目前,我所找到的引导脚本都是尝试顺序引导,即,先判断USB上有没有uEnv.txt有就引导USB,没有再判断eMMC上有没有。
这就导致,当同时在eMMCUSB上刷入armbian,由于只能按一定的顺序尝试引导,最终导致进入错误的系统。

如果要精准引导,你可以先检测所有Device上的uEnv.txt 或自定义其它判断标记,如果全部存在,优先从EMMC引导尝试,如果非EMMC存在,在按检测顺序执行

我也是这样想的,检测特定标识,但如果想区分两个armbian的话,那么就需要修改编译脚本加入更多选项了。但由于meson已经EOF了,官方大概率不会接受这个修改

我感觉可以直接将eMMC 作为第一启动,引导脚本和环境变量都设置为第一启动,这样就不存在启动eMMC脚本去启动其它设备了,当在uboot指定启动USB时,任然会加载eMMC,但是默认参数是先启动eMMC,自然就不会先启动USB, 如此引导脚本就不会误启动其它设备
uboot引导检测设备时,这个有先后顺序,不可能随机启动,自然也就可以在设备启动时增加setenv checkdev XXX,这样后面引导脚本就可根据前面的$chekdev来判断启动设备,这样就无需引导脚本再去随机判断USB1 USB2,但这里最终问题是uboot 环境变量启动时必须定义启动顺序,不能随机启动。
当然如果能让uboot启动顺序变为随机启动,上面的方法任可启动随机启动设备,但如何让uboot变为随机启动,我感觉这个有难度,因为uboot命令都是些基本命令

其实这个提交就是这个思路,但大部分用户在运行脚本前都不会主动的去设置这个变量

此脚本不支持hdmi参数,因hdmi参数,需要固件都支持后可写入引导参数

vi /boot/aml_autoscript.cmd
# DO NOT EDIT THIS FILE

if test ${paroff} != off; then
        setenv checkdev 'mmc'
        setenv bootdev "${checkdev} 1:1"
        setenv start_emmc_check 'mmc part 1; if fatload ${bootdev} ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi;'
        setenv start_mmc_check  'if mmcinfo; then setenv checkdev 'sd'; setenv bootdev 'mmc 0:1'; if fatload ${bootdev} ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi; fi;'
        setenv start_usb_check  'if usb start; then setenv checkdev 'usb'; setenv bootdev "${checkdev} 0"; if fatload ${bootdev} ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi; fi;'
        setenv start_check 'run start_emmc_check; run start_mmc_check; run start_usb_check;'
        setenv bootcmd "run start_check; ${bootcmd}"
        setenv paroff off
        saveenv
        reset
else
        if test ${checkdev} = 'mmc'; then
                setenv rootdev '/dev/mmcblk1p2'
        elif test ${checkdev} = 'sd'; then
                setenv rootdev '/dev/mmcblk0p2'
        elif test ${checkdev} = 'usb'; then
                setenv rootdev '/dev/sda2'
        fi

        setenv rootfstype 'ext4'
        setenv condev 'console=ttyAML0,115200n8'
        setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} rw ${condev} loglevel=1 no_console_suspend consoleblank=0 fsck.repair=yes loglevel=7 panic=10"

        fatload ${bootdev} 0x20800000 /uImage
        fatload ${bootdev} 0x22000000 /uInitrd
        fatload ${bootdev} 0x21800000 /dtb/meson8b-onecloud.dtb
        bootm 0x20800000 0x22000000 0x21800000
fi

mkimage -A arm -O linux -T script -d aml_autoscript.cmd aml_autoscript

# 由于uboot默认环境变量未加载boot.ini,也不一定就能启动到aml_autoscript,故第一步必须解决uboot环境变量,当然刷的uboot自带启动aml_autoscript或boot.ini或s805_autoscript的可直接将其重命名为相应文件
# 注意/boot中有目标文件的注意备份
\cp -f /boot/aml_autoscript /boot/boot.ini
\cp -f /boot/aml_autoscript /boot/s805_autoscript


# uboot 单独启动环境变量命令 
# 此处以usb 为例
usb start; if fatload usb 0 ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi

# 最终建议直接刷配置好环境变量的uboot,如: s805_flash_snail.img

@indiboy
Copy link
Author

indiboy commented Jun 5, 2022

大神能否编译一个版本,还是直接下载你的镜像写入后修改这个文件就可以了,我是小白啊?

@hzyitc hzyitc changed the title powersee的玩客云固件算是很完善的固件了, 关于启动脚本 Jun 5, 2022
@hzyitc
Copy link
Owner

hzyitc commented Jun 5, 2022

我就不引用回复了,要不然实在堆得太长。

这脚本确实不错,适合新手。但个人感觉并不适合并入官方。

个人觉得可以拆成两部分boot.scrs805_autoscript。前者并入官方,后者作为userpatch,在第三方编译脚本中添加。

@hzyitc
Copy link
Owner

hzyitc commented Jun 5, 2022

大神能否编译一个版本,还是直接下载你的镜像写入后修改这个文件就可以了,我是小白啊?

之后会的,但目前还需要修改

@MDCY9008
Copy link

MDCY9008 commented Jun 7, 2022

大神能否编译一个版本,还是直接下载你的镜像写入后修改这个文件就可以了,我是小白啊?

之后会的,但目前还需要修改

如果可以,建议把USB作为启动首项,如果系统有损坏可以快速进入u盘系统进行修复,而且我测试下来我有几台玩客云有些能刷入snail底包有些则不行,有的就算可以刷入还可能出现启动过程中死机,首选底包可以usb启动但又不支持emmc启动,不知道有没有新的底包修复这两种情况。

@fvlw
Copy link

fvlw commented Jun 10, 2022

玩客云因uboot缺少sysboot命令无法引导extlinux.conf,故只能采用*.scr脚本或参数直接引导,建议使用150balbes中的引导方式: e.g. Armbian_21.02.0-trunk_Aml-s812_bionic_current_5.10.0_.img.xz uboot env + s805_autoscript(emmc_autoscript) + uEnv.txt(uEnv.ini)
对于mmc 因搞不明白有时到底是0 还是1,可以多添加一行mmc 1

不是如何引导的问题,而是如何准确引导。让eMMC上的引导脚本引导eMMC上的系统,USB上的引导脚本引导USB上的系统。
目前,我所找到的引导脚本都是尝试顺序引导,即,先判断USB上有没有uEnv.txt有就引导USB,没有再判断eMMC上有没有。
这就导致,当同时在eMMCUSB上刷入armbian,由于只能按一定的顺序尝试引导,最终导致进入错误的系统。

如果要精准引导,你可以先检测所有Device上的uEnv.txt 或自定义其它判断标记,如果全部存在,优先从EMMC引导尝试,如果非EMMC存在,在按检测顺序执行

我也是这样想的,检测特定标识,但如果想区分两个armbian的话,那么就需要修改编译脚本加入更多选项了。但由于meson已经EOF了,官方大概率不会接受这个修改

我感觉可以直接将eMMC 作为第一启动,引导脚本和环境变量都设置为第一启动,这样就不存在启动eMMC脚本去启动其它设备了,当在uboot指定启动USB时,任然会加载eMMC,但是默认参数是先启动eMMC,自然就不会先启动USB, 如此引导脚本就不会误启动其它设备
uboot引导检测设备时,这个有先后顺序,不可能随机启动,自然也就可以在设备启动时增加setenv checkdev XXX,这样后面引导脚本就可根据前面的$chekdev来判断启动设备,这样就无需引导脚本再去随机判断USB1 USB2,但这里最终问题是uboot 环境变量启动时必须定义启动顺序,不能随机启动。
当然如果能让uboot启动顺序变为随机启动,上面的方法任可启动随机启动设备,但如何让uboot变为随机启动,我感觉这个有难度,因为uboot命令都是些基本命令

其实这个提交就是这个思路,但大部分用户在运行脚本前都不会主动的去设置这个变量

此脚本不支持hdmi参数,因hdmi参数,需要固件都支持后可写入引导参数

vi /boot/aml_autoscript.cmd
# DO NOT EDIT THIS FILE

if test ${paroff} != off; then
        setenv checkdev 'mmc'
        setenv bootdev "${checkdev} 1:1"
        setenv start_emmc_check 'mmc part 1; if fatload ${bootdev} ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi;'
        setenv start_mmc_check  'if mmcinfo; then setenv checkdev 'sd'; setenv bootdev 'mmc 0:1'; if fatload ${bootdev} ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi; fi;'
        setenv start_usb_check  'if usb start; then setenv checkdev 'usb'; setenv bootdev "${checkdev} 0"; if fatload ${bootdev} ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi; fi;'
        setenv start_check 'run start_emmc_check; run start_mmc_check; run start_usb_check;'
        setenv bootcmd "run start_check; ${bootcmd}"
        setenv paroff off
        saveenv
        reset
else
        if test ${checkdev} = 'mmc'; then
                setenv rootdev '/dev/mmcblk1p2'
        elif test ${checkdev} = 'sd'; then
                setenv rootdev '/dev/mmcblk0p2'
        elif test ${checkdev} = 'usb'; then
                setenv rootdev '/dev/sda2'
        fi

        setenv rootfstype 'ext4'
        setenv condev 'console=ttyAML0,115200n8'
        setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} rw ${condev} loglevel=1 no_console_suspend consoleblank=0 fsck.repair=yes loglevel=7 panic=10"

        fatload ${bootdev} 0x20800000 /uImage
        fatload ${bootdev} 0x22000000 /uInitrd
        fatload ${bootdev} 0x21800000 /dtb/meson8b-onecloud.dtb
        bootm 0x20800000 0x22000000 0x21800000
fi

mkimage -A arm -O linux -T script -d aml_autoscript.cmd aml_autoscript

# 由于uboot默认环境变量未加载boot.ini,也不一定就能启动到aml_autoscript,故第一步必须解决uboot环境变量,当然刷的uboot自带启动aml_autoscript或boot.ini或s805_autoscript的可直接将其重命名为相应文件
# 注意/boot中有目标文件的注意备份
\cp -f /boot/aml_autoscript /boot/boot.ini
\cp -f /boot/aml_autoscript /boot/s805_autoscript


# uboot 单独启动环境变量命令 
# 此处以usb 为例
usb start; if fatload usb 0 ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi

# 最终建议直接刷配置好环境变量的uboot,如: s805_flash_snail.img

请问下你这个启动脚本怎么使用,我已经刷了首选底包.img 767K那个镜像,我直接下载打包好的镜像写入u盘,在u盘的boot分区里新建一个s805_autoscript文件把你的脚本内容复制进去吗?
图片

@soulant
Copy link

soulant commented Jun 10, 2022

玩客云因uboot缺少sysboot命令无法引导extlinux.conf,故只能采用*.scr脚本或参数直接引导,建议使用150balbes中的引导方式: e.g. Armbian_21.02.0-trunk_Aml-s812_bionic_current_5.10.0_.img.xz uboot env + s805_autoscript(emmc_autoscript) + uEnv.txt(uEnv.ini)
对于mmc 因搞不明白有时到底是0 还是1,可以多添加一行mmc 1

不是如何引导的问题,而是如何准确引导。让eMMC上的引导脚本引导eMMC上的系统,USB上的引导脚本引导USB上的系统。
目前,我所找到的引导脚本都是尝试顺序引导,即,先判断USB上有没有uEnv.txt有就引导USB,没有再判断eMMC上有没有。
这就导致,当同时在eMMCUSB上刷入armbian,由于只能按一定的顺序尝试引导,最终导致进入错误的系统。

如果要精准引导,你可以先检测所有Device上的uEnv.txt 或自定义其它判断标记,如果全部存在,优先从EMMC引导尝试,如果非EMMC存在,在按检测顺序执行

我也是这样想的,检测特定标识,但如果想区分两个armbian的话,那么就需要修改编译脚本加入更多选项了。但由于meson已经EOF了,官方大概率不会接受这个修改

我感觉可以直接将eMMC 作为第一启动,引导脚本和环境变量都设置为第一启动,这样就不存在启动eMMC脚本去启动其它设备了,当在uboot指定启动USB时,任然会加载eMMC,但是默认参数是先启动eMMC,自然就不会先启动USB, 如此引导脚本就不会误启动其它设备
uboot引导检测设备时,这个有先后顺序,不可能随机启动,自然也就可以在设备启动时增加setenv checkdev XXX,这样后面引导脚本就可根据前面的$chekdev来判断启动设备,这样就无需引导脚本再去随机判断USB1 USB2,但这里最终问题是uboot 环境变量启动时必须定义启动顺序,不能随机启动。
当然如果能让uboot启动顺序变为随机启动,上面的方法任可启动随机启动设备,但如何让uboot变为随机启动,我感觉这个有难度,因为uboot命令都是些基本命令

其实这个提交就是这个思路,但大部分用户在运行脚本前都不会主动的去设置这个变量

此脚本不支持hdmi参数,因hdmi参数,需要固件都支持后可写入引导参数

vi /boot/aml_autoscript.cmd
# DO NOT EDIT THIS FILE

if test ${paroff} != off; then
        setenv checkdev 'mmc'
        setenv bootdev "${checkdev} 1:1"
        setenv start_emmc_check 'mmc part 1; if fatload ${bootdev} ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi;'
        setenv start_mmc_check  'if mmcinfo; then setenv checkdev 'sd'; setenv bootdev 'mmc 0:1'; if fatload ${bootdev} ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi; fi;'
        setenv start_usb_check  'if usb start; then setenv checkdev 'usb'; setenv bootdev "${checkdev} 0"; if fatload ${bootdev} ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi; fi;'
        setenv start_check 'run start_emmc_check; run start_mmc_check; run start_usb_check;'
        setenv bootcmd "run start_check; ${bootcmd}"
        setenv paroff off
        saveenv
        reset
else
        if test ${checkdev} = 'mmc'; then
                setenv rootdev '/dev/mmcblk1p2'
        elif test ${checkdev} = 'sd'; then
                setenv rootdev '/dev/mmcblk0p2'
        elif test ${checkdev} = 'usb'; then
                setenv rootdev '/dev/sda2'
        fi

        setenv rootfstype 'ext4'
        setenv condev 'console=ttyAML0,115200n8'
        setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} rw ${condev} loglevel=1 no_console_suspend consoleblank=0 fsck.repair=yes loglevel=7 panic=10"

        fatload ${bootdev} 0x20800000 /uImage
        fatload ${bootdev} 0x22000000 /uInitrd
        fatload ${bootdev} 0x21800000 /dtb/meson8b-onecloud.dtb
        bootm 0x20800000 0x22000000 0x21800000
fi

mkimage -A arm -O linux -T script -d aml_autoscript.cmd aml_autoscript

# 由于uboot默认环境变量未加载boot.ini,也不一定就能启动到aml_autoscript,故第一步必须解决uboot环境变量,当然刷的uboot自带启动aml_autoscript或boot.ini或s805_autoscript的可直接将其重命名为相应文件
# 注意/boot中有目标文件的注意备份
\cp -f /boot/aml_autoscript /boot/boot.ini
\cp -f /boot/aml_autoscript /boot/s805_autoscript


# uboot 单独启动环境变量命令 
# 此处以usb 为例
usb start; if fatload usb 0 ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi

# 最终建议直接刷配置好环境变量的uboot,如: s805_flash_snail.img

请问下你这个启动脚本怎么使用,我已经刷了首选底包.img 767K那个镜像,我直接下载打包好的镜像写入u盘,在u盘的boot分区里新建一个s805_autoscript文件把你的脚本内容复制进去吗? 图片

先刷支持s805_autoscript的引导,如: s805_flash_snail.img
直接将以下附件解压后复制到引导分区,非根分区/boot
附件默认启动顺序:usb→sd→emmc
启动顺序:修改s805_autoscript.cmd中setenv start_check 环境变量后重新用mkimage编译
s805_autoscript.zip

@fvlw
Copy link

fvlw commented Jun 10, 2022

玩客云因uboot缺少sysboot命令无法引导extlinux.conf,故只能采用*.scr脚本或参数直接引导,建议使用150balbes中的引导方式: e.g. Armbian_21.02.0-trunk_Aml-s812_bionic_current_5.10.0_.img.xz uboot env + s805_autoscript(emmc_autoscript) + uEnv.txt(uEnv.ini)
对于mmc 因搞不明白有时到底是0 还是1,可以多添加一行mmc 1

不是如何引导的问题,而是如何准确引导。让eMMC上的引导脚本引导eMMC上的系统,USB上的引导脚本引导USB上的系统。
目前,我所找到的引导脚本都是尝试顺序引导,即,先判断USB上有没有uEnv.txt有就引导USB,没有再判断eMMC上有没有。
这就导致,当同时在eMMCUSB上刷入armbian,由于只能按一定的顺序尝试引导,最终导致进入错误的系统。

如果要精准引导,你可以先检测所有Device上的uEnv.txt 或自定义其它判断标记,如果全部存在,优先从EMMC引导尝试,如果非EMMC存在,在按检测顺序执行

我也是这样想的,检测特定标识,但如果想区分两个armbian的话,那么就需要修改编译脚本加入更多选项了。但由于meson已经EOF了,官方大概率不会接受这个修改

我感觉可以直接将eMMC 作为第一启动,引导脚本和环境变量都设置为第一启动,这样就不存在启动eMMC脚本去启动其它设备了,当在uboot指定启动USB时,任然会加载eMMC,但是默认参数是先启动eMMC,自然就不会先启动USB, 如此引导脚本就不会误启动其它设备
uboot引导检测设备时,这个有先后顺序,不可能随机启动,自然也就可以在设备启动时增加setenv checkdev XXX,这样后面引导脚本就可根据前面的$chekdev来判断启动设备,这样就无需引导脚本再去随机判断USB1 USB2,但这里最终问题是uboot 环境变量启动时必须定义启动顺序,不能随机启动。
当然如果能让uboot启动顺序变为随机启动,上面的方法任可启动随机启动设备,但如何让uboot变为随机启动,我感觉这个有难度,因为uboot命令都是些基本命令

其实这个提交就是这个思路,但大部分用户在运行脚本前都不会主动的去设置这个变量

此脚本不支持hdmi参数,因hdmi参数,需要固件都支持后可写入引导参数

vi /boot/aml_autoscript.cmd
# DO NOT EDIT THIS FILE

if test ${paroff} != off; then
        setenv checkdev 'mmc'
        setenv bootdev "${checkdev} 1:1"
        setenv start_emmc_check 'mmc part 1; if fatload ${bootdev} ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi;'
        setenv start_mmc_check  'if mmcinfo; then setenv checkdev 'sd'; setenv bootdev 'mmc 0:1'; if fatload ${bootdev} ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi; fi;'
        setenv start_usb_check  'if usb start; then setenv checkdev 'usb'; setenv bootdev "${checkdev} 0"; if fatload ${bootdev} ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi; fi;'
        setenv start_check 'run start_emmc_check; run start_mmc_check; run start_usb_check;'
        setenv bootcmd "run start_check; ${bootcmd}"
        setenv paroff off
        saveenv
        reset
else
        if test ${checkdev} = 'mmc'; then
                setenv rootdev '/dev/mmcblk1p2'
        elif test ${checkdev} = 'sd'; then
                setenv rootdev '/dev/mmcblk0p2'
        elif test ${checkdev} = 'usb'; then
                setenv rootdev '/dev/sda2'
        fi

        setenv rootfstype 'ext4'
        setenv condev 'console=ttyAML0,115200n8'
        setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} rw ${condev} loglevel=1 no_console_suspend consoleblank=0 fsck.repair=yes loglevel=7 panic=10"

        fatload ${bootdev} 0x20800000 /uImage
        fatload ${bootdev} 0x22000000 /uInitrd
        fatload ${bootdev} 0x21800000 /dtb/meson8b-onecloud.dtb
        bootm 0x20800000 0x22000000 0x21800000
fi

mkimage -A arm -O linux -T script -d aml_autoscript.cmd aml_autoscript

# 由于uboot默认环境变量未加载boot.ini,也不一定就能启动到aml_autoscript,故第一步必须解决uboot环境变量,当然刷的uboot自带启动aml_autoscript或boot.ini或s805_autoscript的可直接将其重命名为相应文件
# 注意/boot中有目标文件的注意备份
\cp -f /boot/aml_autoscript /boot/boot.ini
\cp -f /boot/aml_autoscript /boot/s805_autoscript


# uboot 单独启动环境变量命令 
# 此处以usb 为例
usb start; if fatload usb 0 ${loadaddr} aml_autoscript; then autoscr ${loadaddr}; fi

# 最终建议直接刷配置好环境变量的uboot,如: s805_flash_snail.img

请问下你这个启动脚本怎么使用,我已经刷了首选底包.img 767K那个镜像,我直接下载打包好的镜像写入u盘,在u盘的boot分区里新建一个s805_autoscript文件把你的脚本内容复制进去吗? 图片

先刷支持s805_autoscript的引导,如: s805_flash_snail.img 直接将以下附件解压后复制到引导分区,非根分区/boot 附件默认启动顺序:usb→sd→emmc 启动顺序:修改s805_autoscript.cmd中setenv start_check 环境变量后重新用mkimage编译 s805_autoscript.zip

启动顺序:修改s805_autoscript.cmd中setenv start_check 环境变量后重新用mkimage编译,重新用mkimage编译,我是否需要自己去编译armbian
git clone https://github.com/armbian/build cd build ./compile.sh
然后进入uboot目录使用mkimage

@soulant
Copy link

soulant commented Jun 10, 2022

mkimage命令:只要linux能安装uboot-tools或u-boot-tools一般就有此命令,故只要能运行此命令即编译此脚本,非编译系统
mkimage -A arm -O linux -T script -d s805_autoscript.cmd s805_autoscript
上面上传附件你不修改启动顺序,就无需修改,直接使用即可

@fvlw
Copy link

fvlw commented Jun 10, 2022

mkimage命令:只要linux能安装uboot-tools或u-boot-tools一般就有此命令,故只要能运行此命令即编译此脚本,非编译系统 mkimage -A arm -O linux -T script -d s805_autoscript.cmd s805_autoscript 上面上传附件你不修改启动顺序,就无需修改,直接使用即可

写完镜像到U盘后,我把你的两个文件放到BOOT里面
图片

u盘插到靠近网线的usb2.成功启动了系统,那接下来怎么写入emmc?https://www.right.com.cn/forum/thread-8237343-1-1.html 这个帖子的镜像也是基于这个,他是自动写入emmc,请问怎么操作?

@lbbboy
Copy link

lbbboy commented Jun 10, 2022

你把BOOT/install 这个文件夹提取出来丢进你U盘的boot

@soulant
Copy link

soulant commented Jun 10, 2022

mkimage命令:只要linux能安装uboot-tools或u-boot-tools一般就有此命令,故只要能运行此命令即编译此脚本,非编译系统 mkimage -A arm -O linux -T script -d s805_autoscript.cmd s805_autoscript 上面上传附件你不修改启动顺序,就无需修改,直接使用即可

写完镜像到U盘后,我把你的两个文件放到BOOT里面 图片

u盘插到靠近网线的usb2.成功启动了系统,那接下来怎么写入emmc?https://www.right.com.cn/forum/thread-8237343-1-1.html 这个帖子的镜像也是基于这个,他是自动写入emmc,请问怎么操作?

单独脚本,我就不写了,自动写入emmc,就是把刷入emmc的脚本写入到了开机自启命令中,这样它就可以每次插上U盘都自动写入

chmod +x /etc/rc.d/rc.local
echo “bash /root/install.sh” >> /etc/rc.local

@fvlw
Copy link

fvlw commented Jun 10, 2022

你把BOOT/install 这个文件夹提取出来丢进你U盘的boot

mkimage命令:只要linux能安装uboot-tools或u-boot-tools一般就有此命令,故只要能运行此命令即编译此脚本,非编译系统 mkimage -A arm -O linux -T script -d s805_autoscript.cmd s805_autoscript 上面上传附件你不修改启动顺序,就无需修改,直接使用即可

写完镜像到U盘后,我把你的两个文件放到BOOT里面 图片
u盘插到靠近网线的usb2.成功启动了系统,那接下来怎么写入emmc?https://www.right.com.cn/forum/thread-8237343-1-1.html 这个帖子的镜像也是基于这个,他是自动写入emmc,请问怎么操作?

单独脚本,我就不写了,自动写入emmc,就是把刷入emmc的脚本写入到了开机自启命令中,这样它就可以每次插上U盘都自动写入

chmod +x /etc/rc.d/rc.local
echo “bash /root/install.sh” >> /etc/rc.local

感谢已解决
chmod +x /etc/rc.local 应该是这样你写错了

@hzyitc
Copy link
Owner

hzyitc commented Jul 4, 2022

可以使用我适配的U-Boot: hzyitc/u-boot-onecloud。可直接引导进系统。

有能力的也可以使用 hzyitc/AmlImg 制作带 armbian 的eMMC直刷镜像。注:官方的armbian-resize-filesystem有bug,如果使用此方法制作完整的直刷镜像,请禁用该服务。否则在调整完rootfs后会出错,无法进入系统。

@fvlw
Copy link

fvlw commented Jul 8, 2022

可以使用我适配的U-Boot: hzyitc/u-boot-onecloud。可直接引导进系统。

有能力的也可以使用 hzyitc/AmlImg 制作带 armbian 的eMMC直刷镜像。注:官方的armbian-resize-filesystem有bug,如果使用此方法制作完整的直刷镜像,请禁用该服务。否则在调整完rootfs后会出错,无法进入系统。

如何使用,没有教程,不会用。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants