How to easily cross-build custom Linux Distribution entirely from source code. Normally it is not an easy task, because you have to deal with lot of different aspects of software development and integration; from infinite configuration options to the strange compiler errors. From hardware specifications to the device drivers and file-systems, I/O console, Task scheduler and almost everything is involved. So, all of this is not simple, but buildroot project may help us. This fantastic tool is able to solve many really complex and boring tasks.
https://buildroot.org – “Buildroot is a simple, efficient and easy to use tool to generate embedded Linux systems through cross-compilation.”
# My host build system is:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic
This is an example on how to build LinuxOS for Olimex low cost board with 64MB RAM and 450Mhz CPU.
$ git clone git://git.buildroot.net/buildroot buildroot_mx23
Cloning into 'buildroot_mx23'...
remote: Enumerating objects: 351177, done.
remote: Counting objects: 100% (351177/351177), done.
remote: Compressing objects: 100% (111770/111770), done.
remote: Total 351177 (delta 245634), reused 342867 (delta 237974)
Receiving objects: 100% (351177/351177), 74.68 MiB | 1.50 MiB/s, done.
Resolving deltas: 100% (245634/245634), done.
Get the list of all configured boards:
$ make list-defconfigs
Built-in configs:
aarch64_efi_defconfig - Build for aarch64_efi
acmesystems_aria_g25_128mb_defconfig - Build for acmesystems_aria_g25_128mb
acmesystems_aria_g25_256mb_defconfig - Build for acmesystems_aria_g25_256mb
acmesystems_arietta_g25_128mb_defconfig - Build for acmesystems_arietta_g25_128mb
acmesystems_arietta_g25_256mb_defconfig - Build for acmesystems_arietta_g25_256mb
amarula_a64_relic_defconfig - Build for amarula_a64_relic
amarula_vyasa_rk3288_defconfig - Build for amarula_vyasa_rk3288
andes_ae3xx_defconfig - Build for andes_ae3xx
arcturus_ucls1012a_defconfig - Build for arcturus_ucls1012a
arcturus_ucp1020_defconfig - Build for arcturus_ucp1020
armadeus_apf27_defconfig - Build for armadeus_apf27
armadeus_apf28_defconfig - Build for armadeus_apf28
armadeus_apf51_defconfig - Build for armadeus_apf51
arm_foundationv8_defconfig - Build for arm_foundationv8
arm_juno_defconfig - Build for arm_juno
asus_tinker_rk3288_defconfig - Build for asus_tinker_rk3288
at91sam9260eknf_defconfig - Build for at91sam9260eknf
at91sam9g20dfc_defconfig - Build for at91sam9g20dfc
at91sam9g45m10ek_defconfig - Build for at91sam9g45m10ek
at91sam9rlek_defconfig - Build for at91sam9rlek
at91sam9x5ek_defconfig - Build for at91sam9x5ek
at91sam9x5ek_dev_defconfig - Build for at91sam9x5ek_dev
at91sam9x5ek_mmc_defconfig - Build for at91sam9x5ek_mmc
at91sam9x5ek_mmc_dev_defconfig - Build for at91sam9x5ek_mmc_dev
atmel_sama5d27_som1_ek_mmc_dev_defconfig - Build for atmel_sama5d27_som1_ek_mmc_dev
atmel_sama5d2_xplained_mmc_defconfig - Build for atmel_sama5d2_xplained_mmc
atmel_sama5d2_xplained_mmc_dev_defconfig - Build for atmel_sama5d2_xplained_mmc_dev
atmel_sama5d3xek_defconfig - Build for atmel_sama5d3xek
atmel_sama5d3_xplained_defconfig - Build for atmel_sama5d3_xplained
atmel_sama5d3_xplained_dev_defconfig - Build for atmel_sama5d3_xplained_dev
atmel_sama5d3_xplained_mmc_defconfig - Build for atmel_sama5d3_xplained_mmc
atmel_sama5d3_xplained_mmc_dev_defconfig - Build for atmel_sama5d3_xplained_mmc_dev
atmel_sama5d4_xplained_defconfig - Build for atmel_sama5d4_xplained
atmel_sama5d4_xplained_dev_defconfig - Build for atmel_sama5d4_xplained_dev
atmel_sama5d4_xplained_mmc_defconfig - Build for atmel_sama5d4_xplained_mmc
atmel_sama5d4_xplained_mmc_dev_defconfig - Build for atmel_sama5d4_xplained_mmc_dev
bananapi_m1_defconfig - Build for bananapi_m1
bananapi_m2_plus_defconfig - Build for bananapi_m2_plus
bananapi_m2_ultra_defconfig - Build for bananapi_m2_ultra
bananapi_m64_defconfig - Build for bananapi_m64
bananapro_defconfig - Build for bananapro
beagleboardx15_defconfig - Build for beagleboardx15
beagleboneai_defconfig - Build for beagleboneai
beaglebone_defconfig - Build for beaglebone
beaglebone_qt5_defconfig - Build for beaglebone_qt5
beelink_gs1_defconfig - Build for beelink_gs1
chromebook_snow_defconfig - Build for chromebook_snow
ci20_defconfig - Build for ci20
csky_gx6605s_defconfig - Build for csky_gx6605s
cubieboard2_defconfig - Build for cubieboard2
engicam_imx6qdl_icore_defconfig - Build for engicam_imx6qdl_icore
engicam_imx6qdl_icore_qt5_defconfig - Build for engicam_imx6qdl_icore_qt5
engicam_imx6qdl_icore_rqs_defconfig - Build for engicam_imx6qdl_icore_rqs
engicam_imx6ul_geam_defconfig - Build for engicam_imx6ul_geam
engicam_imx6ul_isiot_defconfig - Build for engicam_imx6ul_isiot
freescale_imx28evk_defconfig - Build for freescale_imx28evk
freescale_imx6dlsabreauto_defconfig - Build for freescale_imx6dlsabreauto
freescale_imx6dlsabresd_defconfig - Build for freescale_imx6dlsabresd
freescale_imx6qsabreauto_defconfig - Build for freescale_imx6qsabreauto
freescale_imx6qsabresd_defconfig - Build for freescale_imx6qsabresd
freescale_imx6sxsabresd_defconfig - Build for freescale_imx6sxsabresd
freescale_imx7dsabresd_defconfig - Build for freescale_imx7dsabresd
freescale_imx8mmevk_defconfig - Build for freescale_imx8mmevk
freescale_imx8mqevk_defconfig - Build for freescale_imx8mqevk
freescale_imx8qxpmek_defconfig - Build for freescale_imx8qxpmek
freescale_p1025twr_defconfig - Build for freescale_p1025twr
freescale_t1040d4rdb_defconfig - Build for freescale_t1040d4rdb
freescale_t2080_qds_rdb_defconfig - Build for freescale_t2080_qds_rdb
friendlyarm_nanopi_a64_defconfig - Build for friendlyarm_nanopi_a64
friendlyarm_nanopi_neo2_defconfig - Build for friendlyarm_nanopi_neo2
friendlyarm_nanopi_neo_plus2_defconfig - Build for friendlyarm_nanopi_neo_plus2
galileo_defconfig - Build for galileo
grinn_chiliboard_defconfig - Build for grinn_chiliboard
grinn_liteboard_defconfig - Build for grinn_liteboard
hifive_unleashed_defconfig - Build for hifive_unleashed
imx23evk_defconfig - Build for imx23evk
imx6-sabreauto_defconfig - Build for imx6-sabreauto
imx6-sabresd_defconfig - Build for imx6-sabresd
imx6-sabresd_qt5_defconfig - Build for imx6-sabresd_qt5
imx6slevk_defconfig - Build for imx6slevk
imx6sx-sdb_defconfig - Build for imx6sx-sdb
imx6ulevk_defconfig - Build for imx6ulevk
imx6ulpico_defconfig - Build for imx6ulpico
imx7dpico_defconfig - Build for imx7dpico
imx7d-sdb_defconfig - Build for imx7d-sdb
imx8mmpico_defconfig - Build for imx8mmpico
imx8mpico_defconfig - Build for imx8mpico
lafrite_defconfig - Build for lafrite
lego_ev3_defconfig - Build for lego_ev3
licheepi_zero_defconfig - Build for licheepi_zero
linksprite_pcduino_defconfig - Build for linksprite_pcduino
minnowboard_max_defconfig - Build for minnowboard_max
minnowboard_max-graphical_defconfig - Build for minnowboard_max-graphical
mx25pdk_defconfig - Build for mx25pdk
mx51evk_defconfig - Build for mx51evk
mx53loco_defconfig - Build for mx53loco
mx6cubox_defconfig - Build for mx6cubox
mx6sx_udoo_neo_defconfig - Build for mx6sx_udoo_neo
mx6udoo_defconfig - Build for mx6udoo
nanopi_m1_defconfig - Build for nanopi_m1
nanopi_m1_plus_defconfig - Build for nanopi_m1_plus
nanopi_neo_defconfig - Build for nanopi_neo
nexbox_a95x_defconfig - Build for nexbox_a95x
nitrogen6sx_defconfig - Build for nitrogen6sx
nitrogen6x_defconfig - Build for nitrogen6x
nitrogen7_defconfig - Build for nitrogen7
nitrogen8m_defconfig - Build for nitrogen8m
odroidxu4_defconfig - Build for odroidxu4
olimex_a10_olinuxino_lime_defconfig - Build for olimex_a10_olinuxino_lime
olimex_a13_olinuxino_defconfig - Build for olimex_a13_olinuxino
olimex_a20_olinuxino_lime2_defconfig - Build for olimex_a20_olinuxino_lime2
olimex_a20_olinuxino_lime_defconfig - Build for olimex_a20_olinuxino_lime
olimex_a20_olinuxino_micro_defconfig - Build for olimex_a20_olinuxino_micro
olimex_a33_olinuxino_defconfig - Build for olimex_a33_olinuxino
olimex_a64_olinuxino_defconfig - Build for olimex_a64_olinuxino
olimex_imx233_olinuxino_defconfig - Build for olimex_imx233_olinuxino
openblocks_a6_defconfig - Build for openblocks_a6
orangepi_lite2_defconfig - Build for orangepi_lite2
orangepi_lite_defconfig - Build for orangepi_lite
orangepi_one_defconfig - Build for orangepi_one
orangepi_one_plus_defconfig - Build for orangepi_one_plus
orangepi_pc2_defconfig - Build for orangepi_pc2
orangepi_pc_defconfig - Build for orangepi_pc
orangepi_pc_plus_defconfig - Build for orangepi_pc_plus
orangepi_plus_defconfig - Build for orangepi_plus
orangepi_prime_defconfig - Build for orangepi_prime
orangepi_r1_defconfig - Build for orangepi_r1
orangepi_win_defconfig - Build for orangepi_win
orangepi_zero_defconfig - Build for orangepi_zero
orangepi_zero_plus2_defconfig - Build for orangepi_zero_plus2
pandaboard_defconfig - Build for pandaboard
pc_x86_64_bios_defconfig - Build for pc_x86_64_bios
pc_x86_64_efi_defconfig - Build for pc_x86_64_efi
pine64_defconfig - Build for pine64
pine64_sopine_defconfig - Build for pine64_sopine
qemu_aarch64_virt_defconfig - Build for qemu_aarch64_virt
qemu_arm_versatile_defconfig - Build for qemu_arm_versatile
qemu_arm_versatile_nommu_defconfig - Build for qemu_arm_versatile_nommu
qemu_arm_vexpress_defconfig - Build for qemu_arm_vexpress
qemu_arm_vexpress_tz_defconfig - Build for qemu_arm_vexpress_tz
qemu_csky610_virt_defconfig - Build for qemu_csky610_virt
qemu_csky807_virt_defconfig - Build for qemu_csky807_virt
qemu_csky810_virt_defconfig - Build for qemu_csky810_virt
qemu_csky860_virt_defconfig - Build for qemu_csky860_virt
qemu_m68k_mcf5208_defconfig - Build for qemu_m68k_mcf5208
qemu_m68k_q800_defconfig - Build for qemu_m68k_q800
qemu_microblazebe_mmu_defconfig - Build for qemu_microblazebe_mmu
qemu_microblazeel_mmu_defconfig - Build for qemu_microblazeel_mmu
qemu_mips32r2el_malta_defconfig - Build for qemu_mips32r2el_malta
qemu_mips32r2_malta_defconfig - Build for qemu_mips32r2_malta
qemu_mips32r6el_malta_defconfig - Build for qemu_mips32r6el_malta
qemu_mips32r6_malta_defconfig - Build for qemu_mips32r6_malta
qemu_mips64el_malta_defconfig - Build for qemu_mips64el_malta
qemu_mips64_malta_defconfig - Build for qemu_mips64_malta
qemu_mips64r6el_malta_defconfig - Build for qemu_mips64r6el_malta
qemu_mips64r6_malta_defconfig - Build for qemu_mips64r6_malta
qemu_nios2_10m50_defconfig - Build for qemu_nios2_10m50
qemu_or1k_defconfig - Build for qemu_or1k
qemu_ppc64_e5500_defconfig - Build for qemu_ppc64_e5500
qemu_ppc64le_pseries_defconfig - Build for qemu_ppc64le_pseries
qemu_ppc64_pseries_defconfig - Build for qemu_ppc64_pseries
qemu_ppc_g3beige_defconfig - Build for qemu_ppc_g3beige
qemu_ppc_mac99_defconfig - Build for qemu_ppc_mac99
qemu_ppc_mpc8544ds_defconfig - Build for qemu_ppc_mpc8544ds
qemu_ppc_virtex_ml507_defconfig - Build for qemu_ppc_virtex_ml507
qemu_riscv32_virt_defconfig - Build for qemu_riscv32_virt
qemu_riscv64_virt_defconfig - Build for qemu_riscv64_virt
qemu_sh4eb_r2d_defconfig - Build for qemu_sh4eb_r2d
qemu_sh4_r2d_defconfig - Build for qemu_sh4_r2d
qemu_sparc64_sun4u_defconfig - Build for qemu_sparc64_sun4u
qemu_sparc_ss10_defconfig - Build for qemu_sparc_ss10
qemu_x86_64_defconfig - Build for qemu_x86_64
qemu_x86_defconfig - Build for qemu_x86
qemu_xtensa_lx60_defconfig - Build for qemu_xtensa_lx60
qemu_xtensa_lx60_nommu_defconfig - Build for qemu_xtensa_lx60_nommu
raspberrypi0_defconfig - Build for raspberrypi0
raspberrypi0w_defconfig - Build for raspberrypi0w
raspberrypi2_defconfig - Build for raspberrypi2
raspberrypi3_64_defconfig - Build for raspberrypi3_64
raspberrypi3_defconfig - Build for raspberrypi3
raspberrypi3_qt5we_defconfig - Build for raspberrypi3_qt5we
raspberrypi4_defconfig - Build for raspberrypi4
raspberrypi_defconfig - Build for raspberrypi
riotboard_defconfig - Build for riotboard
rock64_defconfig - Build for rock64
roseapplepi_defconfig - Build for roseapplepi
s6lx9_microboard_defconfig - Build for s6lx9_microboard
sheevaplug_defconfig - Build for sheevaplug
snps_aarch64_vdk_defconfig - Build for snps_aarch64_vdk
snps_arc700_axs101_defconfig - Build for snps_arc700_axs101
snps_archs38_axs103_defconfig - Build for snps_archs38_axs103
snps_archs38_haps_defconfig - Build for snps_archs38_haps
snps_archs38_hsdk_defconfig - Build for snps_archs38_hsdk
snps_archs38_vdk_defconfig - Build for snps_archs38_vdk
socrates_cyclone5_defconfig - Build for socrates_cyclone5
solidrun_clearfog_defconfig - Build for solidrun_clearfog
solidrun_clearfog_gt_8k_defconfig - Build for solidrun_clearfog_gt_8k
solidrun_macchiatobin_mainline_defconfig - Build for solidrun_macchiatobin_mainline
solidrun_macchiatobin_marvell_defconfig - Build for solidrun_macchiatobin_marvell
stm32f429_disco_defconfig - Build for stm32f429_disco
stm32f469_disco_defconfig - Build for stm32f469_disco
stm32mp157c_dk2_defconfig - Build for stm32mp157c_dk2
toradex_apalis_imx6_defconfig - Build for toradex_apalis_imx6
ts4900_defconfig - Build for ts4900
ts5500_defconfig - Build for ts5500
ts7680_defconfig - Build for ts7680
wandboard_defconfig - Build for wandboard
warp7_defconfig - Build for warp7
warpboard_defconfig - Build for warpboard
zynq_microzed_defconfig - Build for zynq_microzed
zynqmp_zcu106_defconfig - Build for zynqmp_zcu106
zynq_zc706_defconfig - Build for zynq_zc706
zynq_zed_defconfig - Build for zynq_zed
Select Olimex i.mx233 board configuration:
$ make olimex_imx233_olinuxino_defconfig
...
#
# configuration written to /home/iwi/Documents/buildroot_mx23/.config
#
Now just build and wait. That’s all.
$ make
...
INFO: hdimage(sdcard.img): adding partition 'u-boot' (in MBR) from 'u-boot.sd' ...
INFO: hdimage(sdcard.img): adding partition 'kernel' (in MBR) from 'boot.vfat' ...
INFO: hdimage(sdcard.img): adding partition 'rootfs' (in MBR) from 'rootfs.ext2' ...
INFO: hdimage(sdcard.img): writing MBR
Successful build looks like this, otherwise please check carefully your host system pre-requisites: https://buildroot.org/downloads/manual/manual.html#requirement
The first build may take some time to download all the required source code, build cross-compiler and all host system tools and libraries, than you can build just newly selected packages, but hacking with tool-chain options, requires clean rebuild of everything.
# Insert SD card and unmount all auto-mounted partitions
$ umount /dev/sdX2
$ umount /dev/sdX3
# Write image file to SD card
$ sudo dd if=output/images/sdcard.img of=/dev/sdX bs=1M
97517568 bytes (98 MB, 93 MiB) copied, 12.0944 s, 8.1 MB/s
# Flush all disks buffers
sync
Default board configuration provides Linux OS with minimal set of features and programs tailored for embedded systems. This lightweight Linux system provides excellent starting point for any smart IoT device.
U-Boot 2017.11 (Dec 07 2019 - 04:29:38 +0100)
CPU: Freescale i.MX23 rev1.4 at 454 MHz
BOOT: SSP SD/MMC #0
DRAM: 64 MiB
No arch specific invalidate_icache_all available!
__led_init: failed requesting GPIO59!
MMC: MXS MMC: 0
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot: 0
switch to partitions #0, OK
mmc0 is current device
** Unable to read file boot.scr **
reading uImage
5292296 bytes read in 1640 ms (3.1 MiB/s)
Booting from mmc ...
reading imx23-olinuxino.dtb
10286 bytes read in 29 ms (345.7 KiB/s)
## Booting kernel from Legacy Image at 42000000 ...
Image Name: Linux-4.19.2
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 5292232 Bytes = 5 MiB
Load Address: 42000000
Entry Point: 42000000
Verifying Checksum ... OK
## Flattened Device Tree blob at 41000000
Booting using the fdt blob at 0x41000000
Loading Kernel Image ... OK
Loading Device Tree to 43b75000, end 43b7a82d ... OK
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.19.2 (iwi@nqdev) (gcc version 8.3.0 (Buildroot 2020.02-git-00204-g2ca0accc21)) #1 Sat Dec 7 04:31:14 CET 2019
[ 0.000000] CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=0005317f
[ 0.000000] CPU: VIVT data cache, VIVT instruction cache
[ 0.000000] OF: fdt: Machine model: i.MX23 Olinuxino Low Cost Board
[ 0.000000] Memory policy: Data cache writeback
[ 0.000000] random: get_random_bytes called from start_kernel+0x84/0x474 with crng_init=0
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 16256
[ 0.000000] Kernel command line: console=ttyAMA0,115200 root=/dev/mmcblk0p3 rw rootwait
[ 0.000000] Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
[ 0.000000] Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
[ 0.000000] Memory: 46644K/65536K available (7200K kernel code, 633K rwdata, 2364K rodata, 364K init, 7454K bss, 18892K reserved, 0K cma-reserved)
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[ 0.000000] fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
[ 0.000000] vmalloc : 0xc4800000 - 0xff800000 ( 944 MB)
[ 0.000000] lowmem : 0xc0000000 - 0xc4000000 ( 64 MB)
[ 0.000000] modules : 0xbf000000 - 0xc0000000 ( 16 MB)
[ 0.000000] .text : 0x(ptrval) - 0x(ptrval) (7202 kB)
[ 0.000000] .init : 0x(ptrval) - 0x(ptrval) ( 364 kB)
[ 0.000000] .data : 0x(ptrval) - 0x(ptrval) ( 634 kB)
[ 0.000000] .bss : 0x(ptrval) - 0x(ptrval) (7455 kB)
[ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] Running RCU self tests
[ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16
[ 0.000000] clocksource: mxs_timer: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 911346093 ns
[ 0.000000] Console: colour dummy device 80x30
[ 0.000000] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[ 0.000000] ... MAX_LOCKDEP_SUBCLASSES: 8
[ 0.000000] ... MAX_LOCK_DEPTH: 48
[ 0.000000] ... MAX_LOCKDEP_KEYS: 8191
[ 0.000000] ... CLASSHASH_SIZE: 4096
[ 0.000000] ... MAX_LOCKDEP_ENTRIES: 32768
[ 0.000000] ... MAX_LOCKDEP_CHAINS: 65536
[ 0.000000] ... CHAINHASH_SIZE: 32768
[ 0.000000] memory used by lock dependency info: 4655 kB
[ 0.000000] per task-struct memory footprint: 1536 bytes
[ 0.000000] sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps every 21474836475000000ns
[ 0.070000] Calibrating delay loop... 226.09 BogoMIPS (lpj=1130496)
[ 0.070000] pid_max: default: 32768 minimum: 301
[ 0.070000] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.070000] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[ 0.080000] CPU: Testing write buffer coherency: ok
[ 0.090000] Setting up static identity map for 0x40008400 - 0x40008458
[ 0.100000] devtmpfs: initialized
[ 0.140000] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[ 0.140000] futex hash table entries: 256 (order: 1, 11264 bytes)
[ 0.150000] pinctrl core: initialized pinctrl subsystem
[ 0.160000] NET: Registered protocol family 16
[ 0.170000] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.320000] Serial: AMBA PL011 UART driver
[ 0.320000] 80070000.serial: ttyAMA0 at MMIO 0x80070000 (irq = 17, base_baud = 0) is a PL011 rev2
[ 0.530000] console [ttyAMA0] enabled
[ 0.640000] mxs-dma 80004000.dma-apbh: initialized
[ 0.660000] mxs-dma 80024000.dma-apbx: initialized
[ 0.670000] SCSI subsystem initialized
[ 0.680000] usbcore: registered new interface driver usbfs
[ 0.690000] usbcore: registered new interface driver hub
[ 0.690000] usbcore: registered new device driver usb
[ 0.700000] pps_core: LinuxPPS API ver. 1 registered
[ 0.710000] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 0.710000] PTP clock support registered
[ 0.720000] Advanced Linux Sound Architecture Driver Initialized.
[ 0.740000] clocksource: Switched to clocksource mxs_timer
[ 1.790000] NET: Registered protocol family 2
[ 1.800000] tcp_listen_portaddr_hash hash table entries: 128 (order: 0, 5120 bytes)
[ 1.810000] TCP established hash table entries: 1024 (order: 0, 4096 bytes)
[ 1.820000] TCP bind hash table entries: 1024 (order: 3, 36864 bytes)
[ 1.820000] TCP: Hash tables configured (established 1024 bind 1024)
[ 1.830000] UDP hash table entries: 256 (order: 2, 20480 bytes)
[ 1.840000] UDP-Lite hash table entries: 256 (order: 2, 20480 bytes)
[ 1.850000] NET: Registered protocol family 1
[ 1.860000] RPC: Registered named UNIX socket transport module.
[ 1.870000] RPC: Registered udp transport module.
[ 1.870000] RPC: Registered tcp transport module.
[ 1.880000] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 1.910000] Initialise system trusted keyrings
[ 1.910000] workingset: timestamp_bits=30 max_order=14 bucket_order=0
[ 2.020000] NFS: Registering the id_resolver key type
[ 2.030000] Key type id_resolver registered
[ 2.030000] Key type id_legacy registered
[ 2.040000] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[ 2.100000] jitterentropy: Initialization failed with host not compliant with requirements: 2
[ 2.110000] Key type asymmetric registered
[ 2.120000] Asymmetric key parser 'x509' registered
[ 2.120000] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 248)
[ 2.130000] io scheduler noop registered (default)
[ 2.140000] io scheduler mq-deadline registered
[ 2.140000] io scheduler kyber registered
[ 2.160000] 8006c000.serial: ttyAPP0 at MMIO 0x8006c000 (irq = 147, base_baud = 1500000) is a 8006c000.serial
[ 2.170000] mxs-auart 8006c000.serial: Found APPUART 3.0.0
[ 2.210000] libphy: Fixed MDIO Bus: probed
[ 2.220000] usbcore: registered new interface driver asix
[ 2.230000] usbcore: registered new interface driver ax88179_178a
[ 2.240000] usbcore: registered new interface driver cdc_ether
[ 2.240000] usbcore: registered new interface driver smsc95xx
[ 2.250000] usbcore: registered new interface driver net1080
[ 2.260000] usbcore: registered new interface driver cdc_subset
[ 2.260000] usbcore: registered new interface driver zaurus
[ 2.270000] usbcore: registered new interface driver cdc_ncm
[ 2.280000] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 2.280000] usbcore: registered new interface driver usb-storage
[ 2.300000] imx_usb 80080000.usb: Linked as a consumer to regulator.1
[ 2.310000] ci_hdrc ci_hdrc.0: EHCI Host Controller
[ 2.320000] ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
[ 2.360000] ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
[ 2.380000] hub 1-0:1.0: USB hub found
[ 2.390000] hub 1-0:1.0: 1 port detected
[ 2.410000] stmp3xxx-rtc 8005c000.rtc: rtc core: registered 8005c000.rtc as rtc0
[ 2.420000] i2c /dev entries driver
[ 2.440000] stmp3xxx_rtc_wdt stmp3xxx_rtc_wdt: initialized watchdog with heartbeat 19s
[ 2.450000] mxs-mmc 80010000.ssp: 80010000.ssp supply vmmc not found, using dummy regulator
[ 2.460000] mxs-mmc 80010000.ssp: Linked as a consumer to regulator.0
[ 2.500000] mxs-mmc 80010000.ssp: initialized
[ 2.510000] random: fast init done
[ 2.530000] imx23-pinctrl 80018000.pinctrl: pin SSP1_DETECT already requested by 80010000.ssp; cannot claim for leds
[ 2.540000] imx23-pinctrl 80018000.pinctrl: pin-65 (leds) status -22
[ 2.540000] imx23-pinctrl 80018000.pinctrl: could not request pin 65 (SSP1_DETECT) from group led_gpio2_1.0 on device 80018000.pinctrl
[ 2.560000] leds-gpio leds: Error applying setting, reverse things back
[ 2.560000] leds-gpio: probe of leds failed with error -22
[ 2.580000] mxs-dcp 80028000.dcp: Failed to register sha1 hash!
[ 2.590000] mxs-dcp: probe of 80028000.dcp failed with error -22
[ 2.610000] usbcore: registered new interface driver usbhid
[ 2.610000] usbhid: USB HID core driver
[ 2.630000] mmc0: host does not support reading read-only switch, assuming write-enable
[ 2.650000] mmc0: new high speed SDHC card at address aaaa
[ 2.680000] NET: Registered protocol family 17
[ 2.690000] mmcblk0: mmc0:aaaa SU16G 14.8 GiB
[ 2.700000] Key type dns_resolver registered
[ 2.720000] registered taskstats version 1
[ 2.730000] Loading compiled-in X.509 certificates
[ 2.750000] mmcblk0: p1 p2 p3
[ 2.840000] stmp3xxx-rtc 8005c000.rtc: setting system clock to 1970-01-01 00:00:51 UTC (51)
[ 2.850000] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 2.890000] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 2.900000] ALSA device list:
[ 2.900000] No soundcards found.
[ 2.910000] uart-pl011 80070000.serial: no DMA platform data
[ 2.920000] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[ 2.930000] cfg80211: failed to load regulatory.db
[ 2.950000] EXT4-fs (mmcblk0p3): mounting ext2 file system using the ext4 subsystem
[ 3.000000] EXT4-fs (mmcblk0p3): mounted filesystem without journal. Opts: (null)
[ 3.010000] VFS: Mounted root (ext2 filesystem) on device 179:3.
[ 3.020000] devtmpfs: mounted
[ 3.040000] Freeing unused kernel memory: 364K
[ 3.040000] This architecture does not have kernel memory protection.
[ 3.050000] Run /sbin/init as init process
[ 3.350000] EXT4-fs (mmcblk0p3): re-mounted. Opts: block_validity,barrier,user_xattr
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Starting mdev... OK
Initializing random number generator: OK
Saving random seed: [ 12.930000] random: dd: uninitialized urandom read (512 bytes read)
OK
Starting network: OK
Welcome to Buildroot
buildroot login:
Login is “root”, without password.
# Customize user prompt, save to "~/.profile"
$ nano ~/.profile
PS1="\\u@\\h:\\w$ "
Directory listing for binaries
root@buildroot:/bin$ ls
arch dnsdomainname linux64 nuke sh
ash dumpkmap ln pidof sleep
base64 echo login ping stty
busybox egrep ls pipe_progress su
cat false lsattr printenv sync
chattr fdflush mkdir ps tar
chgrp fgrep mknod pwd touch
chmod getopt mktemp resume true
chown grep more rm umount
cp gunzip mount rmdir uname
cpio gzip mountpoint run-parts usleep
date hostname mt sed vi
dd kill mv setarch watch
df link netstat setpriv zcat
dmesg linux32 nice setserial
root@buildroot:/sbin$ ls
arp init makedevs setconsole
blkid insmod mdev start-stop-daemon
devmem ip mkdosfs sulogin
fdisk ipaddr mke2fs swapoff
freeramdisk iplink mkswap swapon
fsck ipneigh modprobe switch_root
fstrim iproute nameif sysctl
getty iprule pivot_root syslogd
halt iptunnel poweroff tc
hdparm klogd reboot udhcpc
hwclock ldconfig rmmod uevent
ifconfig loadkmap route vconfig
ifdown losetup run-init watchdog
ifup lsmod runlevel
root@buildroot:/usr/bin$ ls
[ du killall nproc sha512sum unlink
[[ eject last nslookup shred unlzma
ar env ldd od sort unlzop
awk expr less openvt strings unxz
basename factor logger passwd svc unzip
bc fallocate logname paste svok uptime
bunzip2 find lsof patch tail uudecode
bzcat flock lspci printf tee uuencode
chrt fold lsscsi readlink telnet vlock
chvt free lsusb realpath test w
cksum fuser lzcat renice tftp wc
clear getconf lzma reset time wget
cmp head lzopcat resize top which
crontab hexdump md5sum seq tr who
cut hexedit mesg setfattr traceroute whoami
dc hostid microcom setkeycodes truncate xargs
deallocvt id mkfifo setsid ts xxd
diff install mkpasswd sha1sum tty xz
dirname ipcrm nl sha256sum uniq xzcat
dos2unix ipcs nohup sha3sum unix2dos yes
root@buildroot:/usr/sbin$ ls
addgroup delgroup fdformat i2cset nologin ubirename
adduser deluser fsfreeze i2ctransfer partprobe
arping dnsd i2cdetect inetd rdate
chroot ether-wake i2cdump killall5 readprofile
crond fbset i2cget loadfont setlogcons
Disk and RAM reports:
root@buildroot:/$ df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 58.1M 5.6M 49.5M 10% /
devtmpfs 22.8M 0 22.8M 0% /dev
tmpfs 23.0M 0 23.0M 0% /dev/shm
tmpfs 23.0M 20.0K 22.9M 0% /tmp
tmpfs 23.0M 20.0K 22.9M 0% /run
root@buildroot:/$ cat /proc/meminfo
MemTotal: 47008 kB
MemFree: 26812 kB
MemAvailable: 36784 kB
Buffers: 232 kB
Cached: 2004 kB
SwapCached: 0 kB
Active: 2072 kB
Inactive: 684 kB
Active(anon): 544 kB
Inactive(anon): 16 kB
Active(file): 1528 kB
Inactive(file): 668 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 28 kB
Writeback: 0 kB
AnonPages: 536 kB
Mapped: 1068 kB
Shmem: 40 kB
Slab: 14296 kB
SReclaimable: 11204 kB
SUnreclaim: 3092 kB
KernelStack: 280 kB
PageTables: 88 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 23504 kB
Committed_AS: 1780 kB
VmallocTotal: 966656 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
Percpu: 32 kB
Disk space is not a big issue, but RAM memory is really limiting factor for this system. Also CPU is low profile ARM926 Running at 454 MHz. This computational power is just enough for mp3 player or light web server or something like photo frame, also because current linux support for this architecture is incomplete and can’t take full advantages of all available peripherals. Anyhow, fast or slow is your system, everything depends on what you intent to do with this system.
root@buildroot:/$ cat /proc/cpuinfo
processor : 0
model name : ARM926EJ-S rev 5 (v5l)
BogoMIPS : 226.09
Features : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part : 0x926
CPU revision : 5
Hardware : Freescale MXS (Device Tree)
Revision : 0000
Serial : 0000000000000000
Back to buildroot configuration. This setup lacks of wifi support and some useful tools like nano and mc. Moreover if you want to adapt kernel configuration to your hardware, add extra drivers and packages:
# Buildroot configuration
$ make menuconfig
# For kernel and drivers configuration
$ make linux-menuconfig
# For busybox configuration
$ make busybox-menuconfig
Useful tool-chain and system settings:
# Select full featured GNU stdc library
Toolchain ---> C library (glibc) ---> (X) glibc
# Enable c++ compiler
[*] Enable C++ support
# Select kernel version
Custom kernel headers series (5.4.x) ---> (X) 5.4.x
# Remote system debugging
[*] Build cross gdb for the host
Select Python, c++, gdb, sudo, mc, ecc...
Network connecction:
# Wifi network
root@mx23:~$ wpa_passphrase ESSID_NAME ESSID_PASS > /root/home_conn.conf
# Connect to home network
root@mx23:~$ wpa_supplicant -B -i wlan0 -c /root/home_conn.conf
# Run DHCP client
root@mx23:~$ udhcpc -i wlan0
# Enable root login for open SSH server
root@mx23:~$ nano /etc/ssh/sshd_config
PermitRootLogin yes
Finally, set swap file:
# Make 128 MB swapfile
root@mx23:~$ fallocate -l 128M /swapfile
root@mx23:~$ chmod 600 /swapfile
root@mx23:~$ mkswap /swapfile
root@mx23:~$ swapon /swapfile
# Add swap info to fstab
root@mx23:~$ nano /etc/fstab
/swapfile none swap defaults 0 0
Next:
Code::blocks IDE and Remote debugging
OpenOCD and Serial JTAG