• Content Count

  • Joined

  • Last visited

Reputation Activity

  1. Like
    boobypi reacted to MOHAMMAD HADI in Multiboot selector for your tv box   
    Ok, I updated the boot manager so it is now more portable and added some convenience features as well.
    Be aware that it is not beginner friendly, you need at least some knowledge about writing and editing u-boot scripts, Uart cable is not needed but can be useful during testing and setting up.
    I rewrote the script in python using curses so It's now more elegent (in my opinion anyway) I tried to get it as close as I can to look like grub2 interface:

    Now let's explain How it works:
    First, the sdcard must contain at least two fat32 partitions:

    -First partition(fat32) (label=RECOVERY) content:
    This partition contains the main boot manager files:
    1-aml_autoscript is the script that is used to update the u-boot environment to allow for our method to work
    2-dtb.img a dtb file, make sure to replace it with the appropriate one for your device I compiled it from coreelec source
    3-Image is the kernel image of the boot manager
    4- multiboot.script is the script that is executed to display the boot manager use this in your update app in android to flash the aml_autoscript above and make the bootloader ready for our boot manager
    -Second Partition(fat32) (label=BOOT) content:
    This partition contains at least the config.yaml file that contains general settings for the boot manager and the boot entries to be listed.
    Mote that I have a folder(multiboot) that contains the boot files for my distros(kernel,initrd,dtb and boot script) you don't have to put them in this partition you can put them anywhere (another partition on the sd card, a USB drive or even in  the internal EMMC) just make sure to have the correct path and device id for them in the config.yaml file.
    Also If you want to use the remote control instead of a keyboard to select the os place the correct remote.conf of your remote in the root of this partition.
    the structure of config.yaml is like this:
    generalSettings: default: 5 rememberboot: true timeout: 10 menu: - bootscript: /multiboot/COREELEC/u-boot.script device: mmc 0:2 devicefs: fat name: COREELEC - bootscript: /multiboot/armbian-3.14.29-mate/u-boot.script device: mmc 0:2 devicefs: fat name: armbian-3.14.29-mate - bootscript: /multiboot/dvb_test/u-boot.script device: mmc 0:2 devicefs: fat name: dvb_test - bootscript: /multiboot/kernel-3.14/u-boot.script first you set the general settings:
    - timeout: this is how many seconds the boot manager should wait before booting into the default boot entry
    - default: this is the zero based index of the default distro that the boot manager will boot to after timeout, note that index 0 is reserved for the internal EMMC boot so your menu starts at index 1.
    - rememberboot: if this is set to true then the manager will remember the entry that you selected and save it's index in the default entry above so the next time you boot this will be your default entry.
    after that you add your menu entries:
    - name: is the name of the distribution displayed in the boot menu
    - bootscript: this is the path of the bootscript of the distribution (note that this boot script should be capable of booting the distro on it's on, so it must have the correct path of the boot files and pass the correct root parameter to the kernel, see the example u-boot.script files that are included in each distibution)
    - device is the device that contains the bootscipt using u-boot format so the first mmc and second partition would be mmc 0:2 , the second mmc and third partiton would be mmc 1:3 .
    - devicefs is the filesystem type of the above device, this is usually fat because most of these tv boxes support loading files of only fat32 partitions (except some boards like khadas vim and odroid whose bootloader support ext4 partitions)
    now let's see an example of a disto bootscript:
    this the same bootscript that was shipped with balbes150 image I only edited the device to mmc 0:2 because this is where I have my kernel and other boot files, also I prepended the correct path before each file name.
    In the uEnv.ini file of this distro I edited the root parameter to use a partition labeled "Debian-3-xfce" and created that partiton using gparted
    I prepared a boot image that contains the boot manager and two distibutions, Coreelec and Debian server.
    download the image here and burn it to a new sdcard then use the update application in android and update using, after that you'll see the boot menu after the reboot
    Below is the old method
    This is my quick and dirty solution to multiboot any amlogic device(actually it can be used on any device that uses u-boot with slight modification):


    ***Warning: the following method was only tested on one device which is KII PRO, I made this method for my own use ,it is a long and a bit complicated to setup for non-experienced users if you want to try it you are trying it at your own risk, I take no responsibility for any damage that may occur to your device.
    Preparing the sd card for multiboot:
    1- Download the zip file from the attachments
    2-wipe everything in your sdcard (i used a 16 gb card) and create 2 partitions:
    -The first one is a fat32 partition, this can be small partition (for me i made it 1gb) it will contain the boot files for the main multiboot system and for any other distributions,i labeled this partition "BOOT".
    -The second partition is ext4 partition which will contain the rootfs of your distributions in raw image format, this need to be a big partition i suggest you assign all remaining available space to this partition, also you need to label it "ROOTFS" (this is mandatory).
    you can use whatever tools you want(gparted,fdisk...etc)

    3-mount the partitions and extract the zip file to the root of your boot partition(the fat32 partition) and create an empty folder called ‘multiboot’ inside the root of the first and second partitions, so the first partition content should  look like this
    ▶ tree . ├── aml_autoscript ├── ├── multiboot ├── config.txt ├── dtb.img ├── s905_autoscript ├── s905_autoscript.cmd ├── umbInitrd └── zImage and the second partition should look like this
    ▶ tree /run/media/mohammad/ROOTFS/ └── multiboot the ‘multiboot’ folder in the first partition should contains folders with the name of the distro and inside them are the bootfiles of that distro(kernel,dtb,initramfs and s905_autoscript file) the ‘multiboot’ folder in the second partition should contain the same folders as in the first partition and inside the folder there should be an ext4 image of the rootfs of the distro
    4- The dtb file i used is for kii pro tv box and you should replace that with the dtb of your device, you can get that from any of balbes150 distributions(3.14.29 kernel).
    Now you'r ready to boot, all you need is some distros
    Preparing the distros:
    You can make a partition for each distro on your sd card and use it to store the rootfs but i chose a more portable solution by making a raw partition image for each distro and pass it to the initramfs to be mounted as a loop device.
    I will be using one of balbes150 distros as an example (Armbian_5.32_S9xxx_Ubuntu_xenial_3.14.29_mate_20170907.img.xz)
    1-First extract the file 
    ▶xz -k -v -d Armbian_5.32_S9xxx_Ubuntu_xenial_3.14.29_mate_20170907.img.xz 2- Now mount the resulting file partitions to some directories, I use kpartx to do it for me automatically
    ▶sudo kpartx -av Armbian_5.32_S9xxx_Ubuntu_xenial_3.14.29_mate_20170907.img add map loop0p1 (254:0): 0 262144 linear 7:0 2048 add map loop0p2 (254:1): 0 8812544 linear 7:0 264192 now mount the loop devices (i use udiskctl)
    ▶ udisksctl mount -b /dev/mapper/loop0p1 Mounted /dev/dm-0 at /run/media/mohammad/BOOT1. ▶ udisksctl mount -b /dev/mapper/loop0p2 Mounted /dev/dm-1 at /run/media/mohammad/ROOTFS1.  
    df -h Filesystem Size Used Avail Use% Mounted on /dev/sdb1 2.0G 215M 1.8G 11% /run/media/mohammad/BOOT #this is my sd card #1 partition /dev/sdb2 13G 6.8G 4.8G 59% /run/media/mohammad/ROOTFS #this is my sd card #2 partition /dev/mapper/loop0p1 128M 53M 76M 42% /run/media/mohammad/BOOT1 #this is the mounted distro image #1 partition /dev/mapper/loop0p2 4.1G 2.9G 1.1G 75% /run/media/mohammad/ROOTFS1 #this is the mounted distro image #2 partition
    3- create a folder with the name of the distro in the multiboot folder you created earlier (in the first and second partitions of your sd card) then copy all the boot files of your distro to the folder in the first partition
    ▶ mkdir /run/media/mohammad/BOOT/multiboot/armbian-3.14.29-mate #this is the first(fat32)partition ▶ mkdir /run/media/mohammad/ROOTFS/multiboot/armbian-3.14.29-mate #this is the second (ext4) partition ▶ cp /run/media/mohammad/BOOT1/* /run/media/mohammad/BOOT/multiboot/armbian-3.14.29-mate/ 4- now you need to create an ext4 partition image to contain the rootfs of your distro for me I made a 4GB image
    fallocate -l 4G system.img mkfs.ext4 system.img  
    5-mount the image
    ▶ sudo losetup $(losetup -f) system.img ▶ udiskctl mount -b /dev/loop1 Mounted /dev/loop1 at /run/media/mohammad/71545ae9-33c7-4d99-963e-a5a915464078. 6-copy all the files from the rootfs of your distro image to the newly created image
    ▶ cp /run/media/mohammad/ROOTFS1/* /run/media/mohammad/71545ae9-33c7-4d99-963e-a5a915464078/ UPDATE: edit the "/etc/fstab" inside the system.img file
    nano /run/media/mohammad/71545ae9-33c7-4d99-963e-a5a915464078/etc/fstab and comment out the lines that start with "LABEL=ROOTFS" and "LABEL=BOOT" by adding a hash at start of each line
    then add these lines to the file :
    /dev/mmcblk1p1 /mnt vfat defaults 0 2 /mnt/multiboot/armbian-3.14.29-mate/ /boot none bind this will fix the 0hdmi.service problem
    7- unmount everything
    ▶ umount /dev/loop1 ▶ umount /dev/mapper/loop0p1 ▶ umount /dev/mapper/loop0p2  
    8-copy the system.img file to your distro folder in the second partition of your sd card
    ▶ cp system.img /run/media/mohammad/ROOTFS/multiboot/armbian-3.14.29-mate 9- move to your distro folder in the first partition of your sdcard:
    ▶ cd /run/media/mohammad/BOOT/multiboot/armbian-3.14.29-mate  
    10- now you need to edit the s905_autoscript.cmd file ( I use nano editor, you can use any text editor you like), you need to make two types of edits in this file
      - add loop=${mbpath}/system.img to the kernel arguments
      - add ${mbpath}/ before each of uInitrd, zImage and dtb.img
    so this
    becomes this
    Note that I removed the lines of booting from usb to decrease the boot time because I know that I’m booting from the sd card, you can leave them if you want.
    11- compile the script
    ▶ mkimage -A arm64 -O linux -T script -C none -d s905_autoscript.cmd s905_autoscript 12-copy the dtb file of your device
    ▶ cp dtb/gxbb_p200_2G.dtb dtb.img  
    Modifying u-boot and booting:
    insert the sd card in the tvbox and then go to the update and backup app and select zip file to update from and choose that is on the root of the sd card, the device should reboot and you should now be able to use the multiboot function
    UPDATE: after booting into the distro disable the resize2fs service using the following command
    sudo systemctl disable resize2fs Notes(mostly for other developers):
    1-I’m a very bad shell programmer, I mostly used snippet from stackoverflow to write the main script (bin/wselector) if you could improve the script or anything in my method that would be appreciated.
    2-boot time is very good but there is always a possibility to improve it, somethings that I can think of are:
    -buiding a smaller kernel by disabling everything in the kernel except for the framebuffer,mmc and nand driver, fat32 and ext4 filesystem,unfortunately whenever I disable something in the kernel it fails to build
    -maybe building a minimum dtb file so that the kernel doesn’t spend time initializing peripherals we don’t need.
    -building all binaries in umbInitrd staticaly
  2. Like
    boobypi got a reaction from Tasha Upchurch in fun! "boot up and remove sd" functionality   
    If data need to be recorded network boot with nfs will be needed but if it's just to run an small emmbedded project, it's possible to load rootfs in ramdisk and remove the sdcard in case you don't use a spi flash to boot.
    It's work fine for sure with openwrt but armbian is too big to fit in ram
  3. Like
    boobypi reacted to tkaiser in NanoPi Neo Core & Core2 & MiniShield   
    Why spreading so much confusion? Both boards have own wiki pages provided by technical writers so there's no need to focus on temporary mistakes their marketing folks might make.
    Main difference between both boards is that Core2 features an RTL8211 GbE PHY while Core uses the SoC's internal Fast Ethernet PHY. And I hope they stay with H3 (or H2+ since essentially the same) on Core and H5 on Core2 and do not start with stupid SoC exchanges since this only leads to confusion and users picking up the wrong OS images.
    Peripherals (heatsink included) are all compatible and they designed the boards fortunately backwards compatible. Pin headers soldered or not can be decided in the store at checkout time (I assume the Core when ordered together with the Mini Shield comes with them presoldered, I can't imagine FE repeating the same mistake as with the first NAS expansion bay).
    Size of DRAM is choosable and eMMC optional. Which combinations might be available might change over time (based on feedback/demand)
    There's USB OTG on the Micro USB port (other boards do it differently eg Tritium and NEO Plus 2 so it's worth to mention since both boards even without pin headers soldered can provide limited network connectivity through g_ether module) and the boards can be powered through pin headers too. Ethernet implementation is interesting since they offer the same Mini Shield for both variants so it should be possible to combine the Core2 with an external GbE MagJack as long as traces are short and most probably of same length ( didn't look into schematic yet).
    Software support efforts seem to be minimal (more or less only DT stuff and maybe checking for GbE TX/RX delay adjustments) and at least with the Core I wouldn't consider Micro USB for DC-IN a show stopper...
  4. Like
    boobypi reacted to Myy in The VPU driver   
    I've ported the new code provided by Ayaka but I still need to test it. Since I'm using a different MiQi, I have to recompile mpp (done) and mpv.
    The last one is posing several issues since it wants a pretty recent version of FFMPEG. I'll see whether I compile a new local version of ffmpeg of if I upgrade from Ubuntu Xenial to Ubuntu Artful to resolve this issue.
  5. Like
    boobypi reacted to zav in [OPiOne] USB power off   
    Thank you very much tkaiser! Thank you all!
    Works great! Problem solved!
    Message to descendants :
    1) Taking out of control of the respective driver
    # cd /boot
    # bin2fex ./bin/orangepione.bin > newbin
    # nano ./newbin
    Change line 'usb_drv_vbus_gpio = port:PL02<1><0><default><0>' on 'usb_drv_vbus_gpio = '
    # rm ./script.bin
    # fex2bin ./newbin > script.bin
    # rm ./newbin
    !REMEMBER! - after reboot power on USB OTG port will be OFF by default!
    # reboot
    2) Export gpio pin PL02.
    To obtain the correct number you have to calculate it from the pin name. Use this formula:
    (position of letter in alphabet - 1) * 32 + pin number (HL02) letter L - stay on 12 position in alphabet.
    (HL02) pin number - 2
    (12-1)*32+2=354 Use GPIO sysfs do next:
    # echo 354 > /sys/class/gpio/export
    # echo "out" > /sys/class/gpio/gpio354/direction
    Power ON
    # echo 1 > /sys/class/gpio/gpio354/value
    Power OFF
    # echo 0 > /sys/class/gpio/gpio354/value
  6. Like
    boobypi got a reaction from MitchD in Launch legacy kernel from mainline uboot is possible?   
    example of command (tested on OP PC) to boot openwrt in ram from a tftp server (sharing dtb, uimage and rootfs) :
    setenv ipaddr 192.168.x.x setenv serverip 192.168.x.x setenv netmask setenv kernel_addr_r 0x42000000 setenv fdt_addr_r 0x43000000 setenv ramdisk_addr_r 0x43300000 setenv rootfsaddr 0x43300000 setenv tftpLoadUBoot tftpboot 0x42000000 openwrt-sunxi-uImage setenv tftpLoadDTB tftpboot 0x43000000 dtb setenv tftpLoadROOTFSRAM tftpboot 0x43300000 openwrt-sunxi-root.ext4 setenv tftpLoadCMD run tftpLoadUBoot tftpLoadDTB tftpLoadROOTFSRAM setenv bootargs console=ttyS0,115200 mem=512M earlyprintk root=/dev/ram0 rw ramdisk_size=200000 initrd=0x43300000,100M saveenv run tftpLoadCMD bootm 0x42000000 - 0x43000000 - 0x43300000  
  7. Like
    boobypi reacted to rodolfo in Remote Desktop Fun with Armbian   
    You're welcome. X2goserver on OPI is definitely on my wishlist and your information is very much appreciated. For pure linux environments I prefer x2goserver/x2goclient over xrdp/rdesktop, except for android clients which lack x2goclient capabilities.
    I'll try your recipe to get a working x2goserver on arm and report back.
    Just set up a working x2goserver installation as per your instructions. Thanks, you are my hero !
    Screenshot of x2goclient running in (virtual) windows7 connected to x2goserver running on OPIONE.

    Have a nice day.
  8. Like
    boobypi got a reaction from rodolfo in Remote Desktop Fun with Armbian   
    Hi guys,

    Thanks for tutorial, i discover rdesktop / xrdp...

    But i would try to make thing in the reverse way : Put x2goserver on OPPC and view from remote (linux or windows).

    It's finally easy with all needed .deb files and some helper from web.

    apt-get install libc6 lsof bc openssh-server openssh-client libconfig-simple-perl pwgen libdbd-pg-perl libdbd-sqlite3-perl libfile-basedir-perl libcapture-tiny-perl adduser xauth psmisc net-tools sshfs x11-apps x11-session-utils x11-utils x11-xfs-utils x11-xkb-utils x11-xserver-utils fontconfig xinit xfonts-base x11-common wget sudo dpkg [--force-conflicts --force-depends] -i libjpeg8_8d-1+deb7u1_armhf.deb git clone cd armhf-x2go-master/ sudo dpkg [--force-depends] -i *.deb sudo apt-get -f install WILL INSTALL ===> cups cups-client cups-common cups-core-drivers cups-daemon cups-filters cups-filters-core-drivers cups-ppdc cups-server-common desktop-file-utils ghostscript gsfonts libcupscgi1 libcupsmime1 libcupsppdc1 libfile-which-perl libfontembed1 libqpdf13 poppler-utils ssl-cert sudo apt-get install x2goclient on the remote machine. run x2goclient and type (server ip address) and your username and pwd as your remote ssh acces. Enjoy! I m happy to find my x2go app.
    Also a real firefox (firefox_45.0.2+build1-0ubuntu0.12.04.1_armhf.deb) (Webgl support with mesa compiled = glmark2 give 5 poor points but it's work lol
  9. Like
    boobypi reacted to rodolfo in [WiP / Orange Pi One] Support for the upcoming Orange Pi One?   
    Nope - just x2goclient on Armbian. Successfully installed xrdp/tightvnc on OPI ONE and accessed it via rdesktop client from linux and aRDP from android.
    For graphical access to OPI ONE running remotely through firewalls, I tunnel and relay the rdesktop-session via ssh/x2goserver running on a x86 server.