buildroot


背景
buildrootの基本機能は、簡単な構成でルートファイルシステムを作成できることです.また、クロスコンパイラを作成し、u-bootおよびカーネルをコンパイルすることもできます.buildrootの基礎知識については後述しませんが、ネット上には多くの資料がありますが、公式サイトの資料を参考にすれば十分です.
クロスコンパイラ
作成
最初に使用する場合はbuildrootでクロスコンパイラを作成する必要があります.
make beaglebone_defconfig
make menuconfig
Toolchain  ---> 
    Toolchain type (Buildroot toolchain)  ---> 
    C library (glibc)  ---> 
    Kernel Headers (Same as kernel being built)  --->
    Custom kernel headers series (3.14.x)  --->
    glibc version (2.23)  --->
    GCC compiler Version (gcc 4.8.x)  --->
    [*] Enable C++ support 
Kernel  --->
    Kernel version (Custom version)  --->
     (3.14) Kernel version 

設定を保存します.make.コンパイルが完了すると、output/host/ディレクトリの下でusrディレクトリが生成されます.USrディレクトリ全体を/opt/arm/ディレクトリにコピーします.もちろん、このディレクトリは任意に指定できます.
保存#ホゾン#
#vi .bash_profile 
PATH=$PATH:$HOME/bin:/opt/arm/usr/bin
#source .bash_profile 

# arm-linux-gcc -v
Using built-in specs.
COLLECT_GCC=/opt/arm/usr/bin/arm-linux-gcc.br_real
COLLECT_LTO_WRAPPER=/opt/arm/usr/bin/../libexec/gcc/arm-buildroot-linux-gnueabihf/4.8.5/lto-wrapper
Target: arm-buildroot-linux-gnueabihf
Configured with: ./configure --prefix=/root/buildroot-2017.02.3/output/host/usr --sysconfdir=/root/buildroot-2017.02.3/output/host/etc --enable-static --target=arm-buildroot-linux-gnueabihf --with-sysroot=/root/buildroot-2017.02.3/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot --disable-__cxa_atexit --with-gnu-ld --disable-libssp --disable-multilib --with-gmp=/root/buildroot-2017.02.3/output/host/usr --with-mpc=/root/buildroot-2017.02.3/output/host/usr --with-mpfr=/root/buildroot-2017.02.3/output/host/usr --with-pkgversion='Buildroot 2017.02.3' --with-bugurl=http://bugs.buildroot.net/ --disable-libquadmath --enable-tls --disable-libmudflap --enable-threads --without-isl --without-cloog --disable-decimal-float --with-abi=aapcs-linux --with-cpu=cortex-a8 --with-fpu=vfpv3-d16 --with-float=hard --with-mode=arm --enable-languages=c,c++ --with-build-time-tools=/root/buildroot-2017.02.3/output/host/usr/arm-buildroot-linux-gnueabihf/bin --enable-shared --disable-libgomp
Thread model: posix
gcc version 4.8.5 (Buildroot 2017.02.3) 

これによりbuildrootによりクロスコンパイルツールが作成されます.また、ダイナミックライブラリのパスを構成する必要があります.
cd /etc/ld.so.conf.d
vi arm.conf
  
/opt/arm/usr/lib
  
ldconfig
    

コンフィギュレーション
次にbuildrootで外部クロスコンパイルツールを設定する必要があります.さっきcopyから出てきたので、クロスコンパイルツールを毎回コンパイルしないようにします.
Toolchain  ---> 
    Toolchain type (External toolchain)  --->
    Toolchain (Custom toolchain)  --->
    Toolchain origin (Pre-installed toolchain)  --->
    (/opt/arm/usr) Toolchain path
    ($(ARCH)-linux) Toolchain prefix (NEW) 
    External toolchain gcc version (4.8.x)  --->
    External toolchain kernel headers series (3.14.x)  ---> 
    External toolchain C library (glibc/eglibc)  ---> 
    [*] Toolchain has C++ support?

u-bootの構成
Bootloaders  ---> 
    U-Boot Version (Custom version)  ---> 
    (2016.09) U-Boot version
    (my_patch) Custom U-Boot patches  
    (am335x_evm) Board defconfig 
    (MLO)   U-Boot SPL binary image name 

その他のオプションはデフォルトです.そのうちmy_patchはあなたのu-bootパッチファイルで、絶対パスです.
カーネルの構成
Kernel  ---> 
    Kernel version (Custom version)  --->
    (3.14) Kernel version 
    (my_patch) Custom kernel patches
    (omap2plus) Defconfig name
    Kernel binary format (uImage)  --->
    (0x80008000) load address (for 3.7+ multi-platform image) 
    [*]   Build a Device Tree Blob (DTB) 
    (am335x-evm) Device Tree Source file names

その他のオプションはデフォルトです.そのうちmy_patchはあなたのu-bootパッチファイルで、絶対パスです.
プロファイルシステム
Filesystem images  --->
    [*] tar the root filesystem 

その他のオプションはデフォルトです.
ルートファイルシステムの作成
コンパイルが完了するとoutput/imagesディレクトリの下でrootfsが生成されます.tar
mkdir rootfs
tar xvf rootfs.tar -C rootfs
cd rootfs/bin
chmod 755 busybox

rootfsは使用可能なルートファイルシステムです.output/targetディレクトリの下のコンテンツをルートファイルシステムとして使用しないでください.このディレクトリの下にはTHIS_を説明するためのファイルがあります.IS_NOT_YOUR_ROOT_FILESYSTEM.
ubiルートファイルシステム
ubiを作成するツール(ubinize、ubifs.conf、mkfs.ubifs)とrootfsを同じディレクトリの下に置くmakeを実行する.sh. スクリプトの内容:
rm -f ubifs.img
rm -f ubi.img
./mkfs.ubifs -r ./rootfs -F -o ubifs.img -m 2048 -e 126976 -c 1580
./ubinize -o ubi.img -m 2048 -p 128KiB -s 2048 -O 2048 ubifs.conf
rm -f ubifs.img

これらのパラメータがどういう意味なのか、具体的にどのくらい設定されているのか、ubiファイルシステムの使用と自分のnandパラメータを理解する必要があります.最終的に生成されたubi.imgは私たちが必要とするubi形式のルートファイルシステムです.
ルートファイルシステムの書き込み
tftp 0x82000000 ubi.img
nand erase 0x780000 0xf880000
nand write.i 0x82000000 0x780000 ${filesize}

ubiを焼くときは、残りのnand空間を消去する必要があります.そうしないと、次のエラーが発生します.
[    1.920406] UBI error: ubi_init: cannot open mtd NAND.file-system, error -2
[    1.994273] davinci_mdio 4a101000.mdio: davinci mdio revision 1.6
[    2.000701] davinci_mdio 4a101000.mdio: detected phy mask fffffffe
[    2.009864] libphy: 4a101000.mdio: probed
[    2.014104] davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, driver SMSC LAN8710/LAN8720
[    2.025761] Detected MACID = 38:d2:69:77:b4:94
[    2.036569] input: volume_keys.7 as /devices/volume_keys.7/input/input0
[    2.047932] omap_rtc 44e3e000.rtc: setting system clock to 2000-01-01 00:00:00 UTC (946684800)
[    2.077501] UBIFS error (pid 1): ubifs_mount: cannot open "ubi0:rootfs", error -19
[    2.085587] VFS: Cannot open root device "ubi0:rootfs" or unknown-block(0,0): error -19
[    2.093999] Please append a correct "root=" boot option; here are the available partitions:
[    2.102928] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)