[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