Go to file
2024-02-04 16:13:08 +09:00
.github/workflows Use the latest checkout action 2023-07-24 17:39:08 +09:00
boot4u@3f916a0cf7 Brainux for x1 2021-12-07 23:01:31 +09:00
brainlilo@2ec8f7827e Update linux-brain, u-boot-brain, and brainlilo 2024-02-04 16:13:08 +09:00
buildroot@cf3ea90108 buildroot: specify an override directory to add files into the buildroot rootfs 2023-07-31 18:34:50 +09:00
cache Add APT cache 2020-10-27 19:52:59 +09:00
image Enhance build scripts to generate a buildroot SD image 2023-07-29 00:24:37 +09:00
linux-brain@afbb7e0176 Update linux-brain, u-boot-brain, and brainlilo 2024-02-04 16:13:08 +09:00
nkbin_maker@4a97a4e807 bring back nkbin_maker 2022-01-25 05:32:19 +09:00
os-brainux Copy systemd units before setup 2023-07-28 21:40:02 +09:00
os-buildroot/override/root Enhance blink.sh 2023-07-31 22:09:11 +09:00
tools Brainux for x1 2021-12-07 23:01:31 +09:00
u-boot-brain@e8fc0d0cf3 Update linux-brain, u-boot-brain, and brainlilo 2024-02-04 16:13:08 +09:00
.clang-format Add .clang-format 2020-10-26 04:20:30 +09:00
.gitchangelog.rc Generate changelog 2021-03-22 22:55:05 +09:00
.gitignore Update misc 2021-03-22 22:41:50 +09:00
.gitmodules Add buildroot submodule 2023-07-29 00:24:37 +09:00
LICENSE Add files 2020-09-28 00:49:26 +09:00
Makefile Enhance build scripts to generate a buildroot SD image 2023-07-29 00:24:37 +09:00
r3build.toml Add files 2020-09-28 00:49:26 +09:00
README.md Update README 2023-07-29 01:35:28 +09:00

buildbrain

This repository includes:

  • linux-brain, u-boot-brain, nkbin_maker and boot4u as submodules
  • Useful build targets in Makefile
  • r3build.toml to watch changes that occur in submodules

Confirmed environments

  • Debian 10 (buster) amd64
  • Debian 11 (bullseye) amd64

Getting Started

  1. Install dependencies.

    $ sudo apt install build-essential bison flex libncurses5-dev gcc-arm-linux-gnueabi gcc-arm-linux-gnueabihf libssl-dev bc lzop qemu-user-static debootstrap kpartx libyaml-dev python3-pyelftools
    
  2. Clone this repository with recursive clone enabled.

    $ git clone --recursive git@github.com:brain-hackers/buildbrain.git
    
    • If you've cloned it without --recursive, run following command:
    $ git submodule update --init --recursive
    
  3. Install uuu.

    • Follow the instruction and build uuu executable.
    • Put uuu where the PATH executable points to.

Build U-Boot

  1. Run make udefconfig-sh* to generate .config.

    • For Sx1: make udefconfig-sh1
    • For Sx6: make udefconfig-sh6
    • For x1: make udefconfig-h1
  2. Run make ubuild to build whole repository and generate u-boot.sb or u-boot.bin.

    • i.MX283 loads a packed U-Boot executable called u-boot.sb.

Inject U-Boot into i.MX283 in recovery mode

  1. Follow Build U-Boot procedure to make U-Boot binary.

  2. Run make uuu

Build and make NK.bin

  1. Follow Build U-Boot procedure to make U-Boot binary.

  2. Run make nkbin-maker.

  3. To make nk.bin, run make nk.bin.

    • nkbin_maker packs u-boot.bin into nk.bin.

Build and deploy boot4u

  1. Run make boot4u

  2. Create index.din and copy AppMain.bin

    • mkdir /path/to/your/sd/1st/partition/App/boot4u
    • touch /path/to/your/sd/1st/partition/App/boot4u/index.din
    • cp boot4u/AppMain.bin /path/to/your/sd/1st/partition/App/boot4u/

Build Linux

  1. Run make ldefconfig to generate .config.

  2. Run make lbuild to generate zImage.

  3. Confirm that linux-brain/arch/arm/boot/zImage exists.

Build a Debian rootfs

  1. Run make ldefconfig lbuild.

  2. Run APT cache in background (mandatory): make aptcache.

  3. Run make brainux.

  4. Run make image/sd.img

  5. Confirm that image/sd.img is built and burn it to an SD card.

Build a Buildroot rootfs

Buildroot rootfs aims to be the most lightweight rootfs for experimental use. make buildroot_rootfs runs the defconfig target for rootfs-only build and then builds the rootfs tarball and a CPIO archive for initramfs. make image/sd_buildroot.img makes a bootable SD image in image directory like the typical Brainux SD image.

If you want to customize the build of Buildroot, cd into buildroot and use the following targets:

  • make menuconfig to change the configuration
  • make to build the rootfs (-j option might give you extra speed)

image/sd_buildroot.img target expects presence of the tarball at buildroot/output/images/rootfs.tar. You'll have to clean and rebuild every time you change the Buildroot's config before making the SD image.

Known issues

If you use GCC 10 for the host compiler, make ubuild may fail. To complete build, open /u-boot-brain/scripts/dtc/dtc-lexer.lex.c or /u-boot-brain/scripts/dtc/dtc-parser.tab.c then comment out YYLTYPE yylloc;

Watch changes in submodules & auto-build

  1. Run make setup-dev to prepare a Python venv to watch code changes. Namely;

    • Python 3 venv in env
    • r3build command in the env
  2. Run r3build. It'll detect the changes you make and builds the corresponding executable automatically.

What's r3build?

r3build is a smart file watcher that aims to provide hot-reloading feature like Web frontend development.