[Librem-5-dev] Building and testing your own kernel

Dorota Czaplejewicz dorota.czaplejewicz at puri.sm
Thu Dec 27 03:43:39 PST 2018


On Thu, 27 Dec 2018 19:20:56 +0800
Andy Green via Librem-5-dev <librem-5-dev at lists.community.puri.sm> wrote:

> Hi -
> 
> I can't find any existing notes about kernel build and test without 
> overwriting the old kernel.  In the absence of any official information, 
> here's how I did it.  It's not hard since Linux, Freescale, Emcraft and 
> Purism (and gcc) guys already did the hard stuff.
> 
> 1) You'll need a serial connection so you can interrupt U-Boot.
> 
> I soldered a 0.1" pitch header for the serial console in and connected a 
> 3.3V USB-Serial adapter as described in [1], which immediately worked at 
> 115200.  There are instructions at [2] that you can use the power USB-C 
> connector as a logical USB CDC ACM device to get the same result.  I 
> tried it using the USB A - C cable that shipped with the device, but no 
> ttyACM0 appeared on my box.
> 
> 2) Install your distro arm64 / aarch64 cross toolchain, or install an 
> external one of a specific gcc version and add it to your path (out of 
> scope for these notes).  For Fedora, it just means:
> 
>   $ sudo dnf install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu
> 
> 3) Clone the kernel tree.
> 
>   $ git clone https://source.puri.sm/Librem5/linux-emcraft.git
>   $ cd linux-emcraft
>   $ mkdir mods
> 
> 4) Optionally choose the branch, tag or commit... by default it's 
> imx8-4.18-wip branch HEAD, 2471a858f4e0 when I tried it, and you can 
> just skip this step and build the latest.  If you want to force it to 
> the exact older commit as was shipped with the dev board:
> 
>   $ git reset --hard  510718c9
> 
> 5) Build the kernel
> 
>   $ CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_STRIP=1 
> INSTALL_MOD_PATH=mods make -j32 ARCH=arm64 librem5-evk_defconfig all 
> modules_install
> 
>    Note 1:  CROSS_COMPILE should be set to the first part of your 
> toolchain binaries.  The Fedora package "gcc-aarch64-linux-gnu" installs 
> a toolchain named like "aarch64-linux-gnu-gcc".  So it's 
> "aarch64-linux-gnu-" with that.
> 
>    Note 2: Change the -j32 to suit your build machine number of threads 
> and memory... 32 means run 32 build steps in parallel.
> 
>    Note 3: The built modules are placed into ./mods/lib/modules/... and 
> can be installed into the dev board rootfs.  But it seems that there's 
> nothing critical for basic operation built as a module.
> 
> 6) Boot the device and confirm the network is working.  It's best to set 
> up keys, but by default the root password is "root".  Sshd is already 
> running and workable.  Find your ip address with ifconfig eth0.
> 
> On the dev board:
> 
>   # mkdir /boot/boot2
>   # mkidr /boot/boot2/dtbs
> 
> On your build machine (replace 192.168.2.245 with its IP)
> 
>   $ scp ./arch/arm64/boot/Image root at 192.168.2.245:/boot/boot2
>   $ scp ./arch/arm64/boot/dts/freescale/librem5-evk.dtb 
> root at 192.168.2.245:/boot/boot2/dtbs
> 
> 7) If you want to copy the modules over too (these are in versioned 
> directories, but caution: if you built the original shipped commit these 
> will overwrite the shipped modules since the version will be the 
> same...) it boots fine for normal operation (network etc) without them...
> 
>   $ scp -rp mods/lib root at 192.168.2.245:/
> 
> 8) Reboot the dev board
> 
>   # reboot
> 
> 9) Press a key to enter U-Boot.  Then paste the U-Boot commands one by one
> 
> setenv fdt_file /boot2/dtbs/librem5-evk.dtb
> setenv image /boot2/Image
> boot
> 
> You will see something like...
> 
> ...
> u-boot=> boot
> Booting from mmc ...
> switch to partitions #0, OK
> mmc0(part 0) is current device
> ** File not found boot.scr **
> ** Unrecognized filesystem type **
> 40831 bytes read in 90 ms (442.4 KiB/s)
> 18827776 bytes read in 941 ms (19.1 MiB/s)
> ## Flattened Device Tree blob at 43000000
>     Booting using the fdt blob at 0x43000000
>     reserving fdt memory region: addr=40000000 size=20000
>     Using Device Tree in place at 0000000043000000, end 000000004300cf7e
> 
> Starting kernel ...
> 
> [    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
> [    0.000000] Linux version 4.18.11-00322-g2471a858f4e0 (agreen at learn) 
> (gcc version 8.1.1 20180626 (Red Hat Cross 8.1.1-3) (GCC)) #1 SMP 
> PREEMPT Thu Dec 27 14:17:58 CST 2018
> [    0.000000] Machine model: Purism Librem 5 devkit
> ...
> 
> If you reboot it again without interrupting U-Boot, it'll just boot into 
> the original kernel as before.
> 
> -Andy
> 
> [1] 
> https://developer.puri.sm/Librem5/Development_Environment/Boards/Troubleshooting.html#attaching-a-usb-to-serial-adapter
> 
> [2] 
> https://developer.puri.sm/Librem5/Development_Environment/Boards/imx8.html#devkit-test-run

Hi Andy,

thank you for doing that work. We're normally building the kernel using image-builder [0], and we're currently using .debs for the kernel.

I feel like this information belongs on some wiki, but we don't have one set up yet. I've started putting random useful info on my own page [1]. David, do you have any ideas?

Cheers,
Dorota

[0] https://source.puri.sm/Librem5/image-builder
[1] https://source.puri.sm/dorota.czaplejewicz/extra_docs/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://lists.community.puri.sm/pipermail/librem-5-dev/attachments/20181227/f2cd6cce/attachment.sig>


More information about the Librem-5-dev mailing list