From ed4f83a0591dda4905f1417c0a0464266676e08a Mon Sep 17 00:00:00 2001 From: Links Date: Fri, 8 Apr 2022 20:13:41 +0200 Subject: [PATCH] uboot boot select via Button press --- .gitignore | 2 +- README.md | 2 +- docs/uboot.md | 54 ++++++++++++++++ userpatches/customize-image.sh | 7 ++- userpatches/overlay/boot.cmd | 42 ------------- userpatches/overlay/boot/boot.cmd | 90 +++++++++++++++++++++++++++ userpatches/overlay/boot/x6100Env.txt | 4 ++ 7 files changed, 154 insertions(+), 47 deletions(-) create mode 100644 docs/uboot.md delete mode 100644 userpatches/overlay/boot.cmd create mode 100644 userpatches/overlay/boot/boot.cmd create mode 100644 userpatches/overlay/boot/x6100Env.txt diff --git a/.gitignore b/.gitignore index bbf9b27..5691d72 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ userpatches/overlay/extracted/* -userpatches/overlay/boot.scr +userpatches/overlay/boot/boot.scr build/ uboot_sdcard.bin \ No newline at end of file diff --git a/README.md b/README.md index 5c592d6..4eaee21 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ git clone https://github.com/armbian/build --depth=1 cp -r userpatches/ build/ cd build -./compile.sh docker BOARD=lime-a33 BRANCH=current RELEASE=buster BUILD_MINIMAL=no BUILD_DESKTOP=yes KERNEL_ONLY=no KERNEL_CONFIGURE=no DESKTOP_ENVIRONMENT=xfce DESKTOP_ENVIRONMENT_CONFIG_NAME=config_base DESKTOP_APPGROUPS_SELECTED="3dsupport browsers" COMPRESS_OUTPUTIMAGE=sha,gpg,img +./compile.sh docker BOARD=lime-a33 BSPFREEZE=yes BRANCH=current RELEASE=buster BUILD_MINIMAL=no BUILD_DESKTOP=yes KERNEL_ONLY=no KERNEL_CONFIGURE=no DESKTOP_ENVIRONMENT=xfce DESKTOP_ENVIRONMENT_CONFIG_NAME=config_base DESKTOP_APPGROUPS_SELECTED="3dsupport browsers" COMPRESS_OUTPUTIMAGE=sha,gpg,img ``` ## install on sdcard diff --git a/docs/uboot.md b/docs/uboot.md new file mode 100644 index 0000000..720c713 --- /dev/null +++ b/docs/uboot.md @@ -0,0 +1,54 @@ +# uboot default env + +```ini +arch=arm +baudrate=115200 +board=sunxi +board_name=sunxi +boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr} +boot_efi_binary=if fdt addr ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr ${fdtcontroladdr};fi;load ${devtypei +boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}extlinux/extlinux.conf +boot_net_usb_start=usb start +boot_prefixes=/ /boot/ +boot_script_dhcp=boot.scr.uimg +boot_scripts=boot.scr.uimg boot.scr +boot_targets=fel mmc_auto usb0 pxe dhcp +bootcmd=run distro_bootcmd +bootcmd_dhcp=run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi;setenv efi_fdtfile ${fdt; +bootcmd_fel=if test -n ${fel_booted} && test -n ${fel_scriptaddr}; then echo '(FEL boot)'; source ${fel_scriptaddr}; fi +bootcmd_mmc0=setenv devnum 0; run mmc_boot +bootcmd_mmc1=setenv devnum 1; run mmc_boot +bootcmd_mmc_auto=if test ${mmc_bootdev} -eq 1; then run bootcmd_mmc1; run bootcmd_mmc0; elif test ${mmc_bootdev} -eq 0; then run bootci +bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi +bootcmd_usb0=setenv devnum 0; run usb_boot +bootm_size=0xa000000 +console=ttyS0,115200 +cpu=armv7 +dfu_alt_info_ram=kernel ram 0x42000000 0x1000000;fdt ram 0x43000000 0x100000;ramdisk ram 0x43300000 0x4000000 +distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done +efi_dtb_prefixes=/ /dtb/ /dtb/current/ +ethaddr=de:ad:be:ef:00:01 +fdt_addr_r=0x43000000 +fdtcontroladdr=7af39548 +fdtfile=sun8i-r16-x6100.dtb +kernel_addr_r=0x42000000 +load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile} +mmc_boot=if mmc dev ${devnum}; then setenv devtype mmc; run scan_dev_for_boot_part; fi +mmc_bootdev=1 +preboot=usb start +pxefile_addr_r=0x43200000 +ramdisk_addr_r=0x43300000 +scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlin; +scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpare +scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; if test -z "${fdtfile}" -a -n "${soc}"; then setenv efi_fdtfile ${soc}-${board}${boarde +scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}extlinux/extlinux.conf; then echo Found ${prefix}exti +scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then eche +scriptaddr=0x43100000 +serial#=16554153070f725b +soc=sunxi +stderr=serial +stdin=serial,usbkbd +stdout=serial +usb_boot=usb start; if usb dev ${devnum}; then setenv devtype usb; run scan_dev_for_boot_part; fi +usbnet_devaddr=de:ad:be:ef:00:01 +``` \ No newline at end of file diff --git a/userpatches/customize-image.sh b/userpatches/customize-image.sh index c166417..cb84c4d 100644 --- a/userpatches/customize-image.sh +++ b/userpatches/customize-image.sh @@ -23,16 +23,17 @@ Main() { apt-get -y remove chrony systemctl enable systemd-timesyncd.service - touch /root/.no_rootfs_resize + #touch /root/.no_rootfs_resize - apt-get install -y wsjtx tightvncserver gdb-minimal gdbserver strace e2fsprogs xfce4-battery-plugin libqt5sql5-sqlite + apt-get install -y wsjtx tightvncserver gdb-minimal gdbserver strace e2fsprogs xfce4-battery-plugin xfce4-power-manager libqt5sql5-sqlite apt-get install -y nano htop curl ncdu gpg dtrx localepurge mtr-tiny screen iotop git wget net-tools etckeeper sudo file bash-completion psmisc dnsutils software-properties-common apt-transport-https xauth aptitude fzf cp /tmp/overlay/extracted/sun8i-r16-x6100.dtb /boot/ cp /tmp/overlay/extracted/sun8i-r16-x6100.dts /boot/ cp /tmp/overlay/extracted/zImage /boot/zImage_org - cp /tmp/overlay/boot.cmd /boot/boot.cmd + mv /boot/boot.cmd /boot/boot.cmd.armbian + cp /tmp/overlay/boot/* /boot/ mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr diff --git a/userpatches/overlay/boot.cmd b/userpatches/overlay/boot.cmd deleted file mode 100644 index 5eb9508..0000000 --- a/userpatches/overlay/boot.cmd +++ /dev/null @@ -1,42 +0,0 @@ -setenv verbosity "1" -setenv devnum "0" -setenv rootdev "/dev/mmcblk${devnum}p1" - -setenv kernel_addr_r 0x46000000 -setenv fdt_addr_r 0x49000000 -setenv ramdisk_addr_r 0x50000000 - -# Print boot source -itest.b *0x28 == 0x00 && echo "U-boot loaded from SD" -itest.b *0x28 == 0x02 && echo "U-boot loaded from eMMC or secondary SD" -itest.b *0x28 == 0x03 && echo "U-boot loaded from SPI" - -echo "devnum: ${devnum}" - -if test "${devtype}" = "mmc"; then - part uuid mmc ${devnum}:1 partuuid; - setenv devnum ${mmc_bootdev} - setenv rootdev "/dev/mmcblk${mmc_bootdev}p1" -fi - -echo "Boot script loaded from ${devtype}" -echo "rootdev: ${rootdev}" -echo "devnum: ${devnum}" -echo "mmc_bootdev: ${mmc_bootdev}" -echo "prefix: ${prefix}" - - -echo "------------ x6100 boot script ------------" -setenv bootargs console=ttyS0,115200 root=${rootdev} rootwait panic=10 fbcon=rotate:3 video=VGA:480x800 cgroup_enable=memory swapaccount=1 loglevel=${verbosity} - - -load ${devtype} ${devnum} ${kernel_addr_r} ${prefix}/zImage_org -load ${devtype} ${devnum} ${ramdisk_addr_r} ${prefix}/uInitrd -load ${devtype} ${devnum} ${fdt_addr_r} ${prefix}/sun8i-r16-x6100.dtb -fdt addr ${fdt_addr_r} -fdt resize 65536 - -bootz ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r} - -# Recompile with: -# mkimage -C none -A arm -T script -d boot.cmd boot.scr diff --git a/userpatches/overlay/boot/boot.cmd b/userpatches/overlay/boot/boot.cmd new file mode 100644 index 0000000..10f4c92 --- /dev/null +++ b/userpatches/overlay/boot/boot.cmd @@ -0,0 +1,90 @@ +setenv verbosity "1" +setenv devnum "0" +setenv rootdev "/dev/mmcblk${devnum}p1" +setenv nosdboot "0" + +setenv kernel_addr_r 0x46000000 +setenv fdt_addr_r 0x49000000 +setenv ramdisk_addr_r 0x50000000 + +setenv consoleargs "" +setenv console "both" +setenv earlycon "on" +setenv bootlogo "false" +setenv docker_optimizations "on" + +setenv fdtfile "sun8i-r16-x6100.dtb" +setenv luInitrd "uInitrd" +setenv bootargs_extra "" +setenv lkernel "zImage" + +# Print boot source +itest.b *0x28 == 0x00 && echo "U-boot loaded from SD" +itest.b *0x28 == 0x02 && echo "U-boot loaded from eMMC or secondary SD" +itest.b *0x28 == 0x03 && echo "U-boot loaded from SPI" + +if test "${devtype}" = "mmc"; then + part uuid mmc ${devnum}:1 partuuid; + setenv devnum ${mmc_bootdev} + setenv rootdev "/dev/mmcblk${mmc_bootdev}p1" +fi + +echo "Boot script loaded from ${devtype}" +echo "rootdev: ${rootdev}" +echo "devnum: ${devnum}" +echo "mmc_bootdev: ${mmc_bootdev}" +echo "prefix: ${prefix}" + +if test -e ${devtype} ${devnum} ${prefix}/x6100Env.txt; then + load ${devtype} ${devnum} ${kernel_addr_r} ${prefix}/x6100Env.txt + env import -t ${kernel_addr_r} ${filesize} +fi + +#set matrix row +gpio clear PG6 + +if gpio input PE16 ; then + echo "------------- BUTTON 1 -------------" + run BUTTON_1 +elif gpio input PE17 ; then + echo "------------- BUTTON 2 -------------" + run BUTTON_2 +elif gpio input PE11 ; then + echo "------------- BUTTON 3 -------------" + run BUTTON_3 +else + echo "------------- NO BUTTON -------------" + run BUTTON_NONE +fi + +#reset matrix +gpio input PG6 + +# enable key LEDs to show that the key can be released +gpio set 143 + +if test "${nosdboot}" = "0" ; then + +echo "------------ x6100 boot script ------------" + +if test "${console}" = "display" || test "${console}" = "both"; then setenv consoleargs "console=ttyS0,115200 console=tty1"; fi +if test "${console}" = "serial"; then setenv consoleargs "console=ttyS0,115200"; fi +if test "${earlycon}" = "on"; then setenv consoleargs "earlycon ${consoleargs}"; fi +if test "${bootlogo}" = "true"; then setenv consoleargs "bootsplash.bootfile=bootsplash.armbian ${consoleargs}"; fi + +setenv bootargs "root=${rootdev} rootwait ${consoleargs} net.ifnames=0 panic=10 fbcon=rotate:3 video=VGA:480x800 ubootpart=${partuuid} ubootsource=${devtype} loglevel=${verbosity} ${bootargs_extra}" + +if test "${docker_optimizations}" = "on"; then setenv bootargs "${bootargs} cgroup_enable=memory swapaccount=1"; fi + +load ${devtype} ${devnum} ${kernel_addr_r} ${prefix}/${lkernel} +load ${devtype} ${devnum} ${ramdisk_addr_r} ${prefix}/${luInitrd} +load ${devtype} ${devnum} ${fdt_addr_r} ${prefix}/${fdtfile} +fdt addr ${fdt_addr_r} +fdt resize 65536 + +bootz ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r} + +fi + +# Recompile with: +# mkimage -C none -A arm -T script -d boot.cmd boot.scr diff --git a/userpatches/overlay/boot/x6100Env.txt b/userpatches/overlay/boot/x6100Env.txt new file mode 100644 index 0000000..70e3e0e --- /dev/null +++ b/userpatches/overlay/boot/x6100Env.txt @@ -0,0 +1,4 @@ +BUTTON_NONE=setenv nosdboot 1 +BUTTON_1=setenv lkernel zImage_org; setenv bootargs_extra x6100_app=1 lightdm_screen=0 lightdm_vnc=1 +BUTTON_2=setenv lkernel zImage_org; setenv bootargs_extra x6100_app=0 lightdm_screen=1 lightdm_vnc=1 +BUTTON_3=setenv lkernel zImage; setenv bootargs_extra x6100_app=0 lightdm_screen=0 lightdm_vnc=1 \ No newline at end of file