06-22-2020, 01:17 PM
(This post was last modified: 06-24-2020, 01:25 AM by davegermiquet.
Edit Reason: Updated more concise thing is did
)
My current experiences with Mobian, and compiling the kernel:
Brief overview:
- My main objective was to compile ZRAM module in to the kernel of Mobian.
What ended up happening I learned the following:
[*]How to edit the initrd, add use existing image, to make my own custom image
Example serial module:
COVVY CP2102 Module USB to TTL 5PIN Serial Converter Adapter Module, UART STC Downloader for 3.3V and 5V with Jumper Wires (2pcs)
by LYCHEE LIMITED
Learn more: https://www.amazon.ca/dp/B07VMKYZD6/ref=...8EbG2TYKA3
Result:
Telegram started working properly
ZRAM sped things up
Wifi stopped breaking!
(Example above)
Debugging from uboot on OSX system:
- Install Uart Drivers
- Plug in USB cable to Mac book
You can access like the following:
screen /dev/cu.SLAB_USBtoUART 115200
(Above depends on module using)
UBOOT INFORMATION:
Once connected, when you boot up you get the following, hit ESC right away to get into options:
Note: DO not use the initrd RAM feature for uboot, you won’t get any booting going on
ext4load mmc 1:2 0x40080000 /boot/Image
ext4load mmc 1:2 0x4FA00000 /boot/dtb/sun50i-a64-pinephone-1.2.dtb
Or
ext4load mmc 1:2 ${kernel_addr_r} /boot/Image
ext4load mmc 1:2 ${fdt_addr_r} /boot/dtb/sun50i-a64-pinephone-1.2.dtb
setenv bootargs root=/dev/mmcblk2p2 rw console=ttyS0,115200 console=tty1 initrd=/boot/initrd.img
booti 0x40080000 - 0x4FA00000
Common commands in uboot settings:
Example:
- help ext4load
- mmc list
- mmc info
- printenv
Common environment helpful variables inside boot that I found:
${kernel_addr_r} (where I can load the image but I don’t think it matters where you put (not sure)
${ftb_addr_r} where I put the pine phone DTB files.
The following raw commands start up the kernel
Example boot up: of kernel
Trying to boot from MMC2
NOTICE: BL31: v2.3():
NOTICE: BL31: Built : 17:34:37, Apr 26 2020
NOTICE: BL31: Detected Allwinner A64/H64/R18 SoC (1689)
NOTICE: BL31: Found U-Boot DTB at 0x40635c0, model: Pine64 PinePhone (1.2)
INFO: ARM GICv2 driver initialized
INFO: Configuring SPC Controller
INFO: PMIC: Probing AXP803 on RSB
INFO: PMIC: dcdc1 voltage: 3.300V
INFO: PMIC: dcdc5 voltage: 1.200V
INFO: PMIC: dcdc6 voltage: 1.100V
INFO: PMIC: dldo1 voltage: 3.300V
INFO: BL31: Platform setup done
INFO: BL31: Initializing runtime services
INFO: BL31: cortex_a53: CPU workaround for 843419 was applied
INFO: BL31: cortex_a53: CPU workaround for 855873 was applied
NOTICE: PSCI: System suspend is available via SCPI
INFO: BL31: Preparing for EL3 exit to normal world
INFO: Entry point address = 0x4a000000
INFO: SPSR = 0x3c9
U-Boot 2020.04+dfsg-2+pinephone4 (Jun 11 2020 - 07:21:23 +0000)
DRAM: 2 GiB
MMC: mmc@1c0f000: 0, mmc@1c11000: 1
Loading Environment from FAT... Unable to use mmc 1:2... starting USB...
No working controllers found
Hit any key to stop autoboot: 0
=>
KERNEL I USED:
origin https://gitlab.com/mobian1/devices/pinephone-linux.git (fetch)
origin https://gitlab.com/mobian1/devices/pinephone-linux.git (push)
How to compile kernel and setup uboot on mobian:
> docker run / or docker exec to get on docker instance
Once all prerequisites installed:
> git clone linuxkernel
>
Copy mobians /proc/config.gz for a starting point of previous config
cd kernelfolder/
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- mrproper
> cp config.gz .config
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- oldconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
(Add the features you want)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
Then make the modules into a separate folder, so you can copy the over,
cp $LINUX/arch/arm64/boot/Image /build
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules_install INSTALL_MOD_PATH=/build/lib
cp./arch/<arch>/boot/dts/
Probably only need one but I copied all dtbs to /build folder
sun50i-a64-pine64-lts.dtb sun50i-a64-pinephone-1.2.dts
sun50i-a64-pine64-lts.dts sun50i-a64-pinephone.dtb
sun50i-a64-pine64-plus.dtb sun50i-a64-pinephone.dts
sun50i-a64-pine64-plus.dts sun50i-a64-pinephone.dtsi
sun50i-a64-pine64.dtb sun50i-a64-pinetab.dtb
sun50i-a64-pine64.dts sun50i-a64-pinetab.dts
sun50i-a64-pinebook.dtb sun50i-a64-sopine-baseboard.dtb
sun50i-a64-pinebook.dts sun50i-a64-sopine-baseboard.dts
sun50i-a64-pinephone-1.0.dtb sun50i-a64-sopine.dtsi
sun50i-a64-pinephone-1.0.dts sun50i-h6-pine-h64-model-b.dtb
sun50i-a64-pinephone-1.1.dtb sun50i-h6-pine-h64-model-b.dts
sun50i-a64-pinephone-1.1.dts sun50i-h6-pine-h64.dtb
sun50i-a64-pinephone-1.2.dtb sun50i-h6-pine-h64.dts
How to make the initrd:
cd /build/initrd
zcat existingimg.img | cpio -idmv
Usually all you need to do is copy over only the latest modules folder, or replace them
Then zip it up
find . | cpio -o -c | gzip -9 > /build/new.img
Now you should probably have all the files:
On mobian (Due to small boot folder do this)
mkdir /realboot
Copy dtbs folder to the /realboot folder
Copy image to the /realboot folder
Copy initrd to the /realboot folder
Copy the new modules created to the proper folder on /lib/modules folder
unmount /boot (the small folder)
copy all these files on /boot (on mmcblk2p2)
create the following text file:
ext4load mmc 1:2 ${kernel_addr_r} /boot/Image
ext4load mmc 1:2 ${fdt_addr_r} /boot/dtb/sun50i-a64-pinephone-1.2.dtb
setenv bootargs root=/dev/mmcblk2p2 rw console=ttyS0,115200 console=tty1 initrd=/boot/initrd.img
booti 0x40080000 - 0x4FA00000
run mkimage:
bash-3.2# mkimage -C none -A arm -T script -d boot.text boot.scr
then fdisk /dev/mmcblk2
and make the /dev/mmcblk2p2 the active partition
reboot.
Brief overview:
- My main objective was to compile ZRAM module in to the kernel of Mobian.
What ended up happening I learned the following:
- uBoot
- Kernel
- (Mobian had a small partition so I had to modify uBoot to put a new kernel and module system on there)
- Serial Modules, and converting my raspberry pi connector to a headphone UART option by cutting both a headphone cable, and a raspberry pi uart cable, and tying the wires together.
- Possible cheap option (by uARt, chip on amazon and cut a headphones that the speakers are broken to make your own.
12 bucks....max it looks like Canadian
[*]How to edit the initrd, add use existing image, to make my own custom image
Example serial module:
COVVY CP2102 Module USB to TTL 5PIN Serial Converter Adapter Module, UART STC Downloader for 3.3V and 5V with Jumper Wires (2pcs)
by LYCHEE LIMITED
Learn more: https://www.amazon.ca/dp/B07VMKYZD6/ref=...8EbG2TYKA3
Result:
Telegram started working properly
ZRAM sped things up
Wifi stopped breaking!
(Example above)
Debugging from uboot on OSX system:
- Install Uart Drivers
- Plug in USB cable to Mac book
You can access like the following:
screen /dev/cu.SLAB_USBtoUART 115200
(Above depends on module using)
UBOOT INFORMATION:
Once connected, when you boot up you get the following, hit ESC right away to get into options:
Note: DO not use the initrd RAM feature for uboot, you won’t get any booting going on
- Kernels that images are gzipped I couldn’t get to work correctly, I had to unzip it to use it within uboot
- Example working solution using boot.text compile boot.scr
ext4load mmc 1:2 0x40080000 /boot/Image
ext4load mmc 1:2 0x4FA00000 /boot/dtb/sun50i-a64-pinephone-1.2.dtb
Or
ext4load mmc 1:2 ${kernel_addr_r} /boot/Image
ext4load mmc 1:2 ${fdt_addr_r} /boot/dtb/sun50i-a64-pinephone-1.2.dtb
setenv bootargs root=/dev/mmcblk2p2 rw console=ttyS0,115200 console=tty1 initrd=/boot/initrd.img
booti 0x40080000 - 0x4FA00000
Common commands in uboot settings:
- the bootargs environment
- ext4load for loading binary files into memory of uboot
- help
- help command
- booti
- bootm
- boot
Example:
- help ext4load
- mmc list
- mmc info
- printenv
Common environment helpful variables inside boot that I found:
${kernel_addr_r} (where I can load the image but I don’t think it matters where you put (not sure)
${ftb_addr_r} where I put the pine phone DTB files.
The following raw commands start up the kernel
Example boot up: of kernel
Trying to boot from MMC2
NOTICE: BL31: v2.3():
NOTICE: BL31: Built : 17:34:37, Apr 26 2020
NOTICE: BL31: Detected Allwinner A64/H64/R18 SoC (1689)
NOTICE: BL31: Found U-Boot DTB at 0x40635c0, model: Pine64 PinePhone (1.2)
INFO: ARM GICv2 driver initialized
INFO: Configuring SPC Controller
INFO: PMIC: Probing AXP803 on RSB
INFO: PMIC: dcdc1 voltage: 3.300V
INFO: PMIC: dcdc5 voltage: 1.200V
INFO: PMIC: dcdc6 voltage: 1.100V
INFO: PMIC: dldo1 voltage: 3.300V
INFO: BL31: Platform setup done
INFO: BL31: Initializing runtime services
INFO: BL31: cortex_a53: CPU workaround for 843419 was applied
INFO: BL31: cortex_a53: CPU workaround for 855873 was applied
NOTICE: PSCI: System suspend is available via SCPI
INFO: BL31: Preparing for EL3 exit to normal world
INFO: Entry point address = 0x4a000000
INFO: SPSR = 0x3c9
U-Boot 2020.04+dfsg-2+pinephone4 (Jun 11 2020 - 07:21:23 +0000)
DRAM: 2 GiB
MMC: mmc@1c0f000: 0, mmc@1c11000: 1
Loading Environment from FAT... Unable to use mmc 1:2... starting USB...
No working controllers found
Hit any key to stop autoboot: 0
=>
KERNEL I USED:
origin https://gitlab.com/mobian1/devices/pinephone-linux.git (fetch)
origin https://gitlab.com/mobian1/devices/pinephone-linux.git (push)
How to compile kernel and setup uboot on mobian:
- Installed docker
- Download docker Debian image (latest version) using docker pull
- Install the build essentials for Debian
- Install the cross compilers needed
- Download the kernel using git
> docker run / or docker exec to get on docker instance
Once all prerequisites installed:
> git clone linuxkernel
>
Copy mobians /proc/config.gz for a starting point of previous config
cd kernelfolder/
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- mrproper
> cp config.gz .config
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- oldconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
(Add the features you want)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
Then make the modules into a separate folder, so you can copy the over,
cp $LINUX/arch/arm64/boot/Image /build
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules_install INSTALL_MOD_PATH=/build/lib
cp./arch/<arch>/boot/dts/
Probably only need one but I copied all dtbs to /build folder
sun50i-a64-pine64-lts.dtb sun50i-a64-pinephone-1.2.dts
sun50i-a64-pine64-lts.dts sun50i-a64-pinephone.dtb
sun50i-a64-pine64-plus.dtb sun50i-a64-pinephone.dts
sun50i-a64-pine64-plus.dts sun50i-a64-pinephone.dtsi
sun50i-a64-pine64.dtb sun50i-a64-pinetab.dtb
sun50i-a64-pine64.dts sun50i-a64-pinetab.dts
sun50i-a64-pinebook.dtb sun50i-a64-sopine-baseboard.dtb
sun50i-a64-pinebook.dts sun50i-a64-sopine-baseboard.dts
sun50i-a64-pinephone-1.0.dtb sun50i-a64-sopine.dtsi
sun50i-a64-pinephone-1.0.dts sun50i-h6-pine-h64-model-b.dtb
sun50i-a64-pinephone-1.1.dtb sun50i-h6-pine-h64-model-b.dts
sun50i-a64-pinephone-1.1.dts sun50i-h6-pine-h64.dtb
sun50i-a64-pinephone-1.2.dtb sun50i-h6-pine-h64.dts
How to make the initrd:
cd /build/initrd
zcat existingimg.img | cpio -idmv
Usually all you need to do is copy over only the latest modules folder, or replace them
Then zip it up
find . | cpio -o -c | gzip -9 > /build/new.img
Now you should probably have all the files:
On mobian (Due to small boot folder do this)
mkdir /realboot
Copy dtbs folder to the /realboot folder
Copy image to the /realboot folder
Copy initrd to the /realboot folder
Copy the new modules created to the proper folder on /lib/modules folder
unmount /boot (the small folder)
copy all these files on /boot (on mmcblk2p2)
create the following text file:
ext4load mmc 1:2 ${kernel_addr_r} /boot/Image
ext4load mmc 1:2 ${fdt_addr_r} /boot/dtb/sun50i-a64-pinephone-1.2.dtb
setenv bootargs root=/dev/mmcblk2p2 rw console=ttyS0,115200 console=tty1 initrd=/boot/initrd.img
booti 0x40080000 - 0x4FA00000
run mkimage:
bash-3.2# mkimage -C none -A arm -T script -d boot.text boot.scr
then fdisk /dev/mmcblk2
and make the /dev/mmcblk2p2 the active partition
reboot.