參考:php
https://github.com/cubieboard/cubieboard.org/issues/5git
內核和uboot編譯成功之後執行build pack打包鏡像文件,生成的鏡像文件是基於flash的,只能燒寫工具燒如flash後從flash啓動。github
參考:https://linux-sunxi.org/Manual_build_howtobootstrap
有2個方案能夠選擇,一個是從sunxi分支編譯,一個是從主線編譯。svn
從sunxi分支編譯參考:https://linux-sunxi.org/U-Boot#Compile_U-Boot工具
能夠經過boot.scr 文件來設置uboot環境變量,boot.scr 文件是從boot.cmd文件轉換來的:ui
mkimage -C none -A arm -T script -d boot.cmd boot.scr
參數配置參考:https://linux-sunxi.org/U-Boot/Configurationspa
一樣能夠選擇從sunxi分支或者主線編譯:.net
https://linux-sunxi.org/Linux_Kernel#Compilation
參考:https://linux-sunxi.org/Script.bin#Build_script.bin
script.bin是sunxi替代設備樹dtb用於描述系統設備的文件,是從script.fex文件轉換來的。
這裏只須要選取A20的某個板子的基礎上進行調整便可。
參考:https://linux-sunxi.org/Bootable_SD_card
2.5.1 清空sd卡
dd
if
=
/dev/zero
of=${card} bs=1M count=1
2.5.2 安裝BootLoader
dd
if
=u-boot-sunxi-with-spl.bin of=${card} bs=1024 seek=8
2.5.3 建立及格式化分區
blockdev --rereadpt ${card}
cat
<<EOT | sfdisk ${card}
1M,16M,c
,,L
EOT
格式化:
mkfs.vfat ${card}${p}1
mkfs.ext4 ${card}${p}2
2.5.4 boot分區
mount
${card}${p}1
/mnt/
cp
linux-sunxi
/arch/arm/boot/uImage
/mnt/
cp
sunxi-boards
/sys_config/a10/script
.bin
/mnt/
umount
/mnt/
若是須要修改uboot環境變量還須要拷貝boot.scr文件
2.5.5 文件系統
這裏選擇debootstrap方案,建立基於debain的根文件系統
1)準備階段
debootstrap --arch=armhf --foreign $distro /mnt/
這個操做會花費很長時間
完成以後須要chroot到/mnt繼續進行第二階段的操做
cp /usr/bin/qemu-arm-static /mnt/usr/bin/ chroot /mnt /usr/bin/qemu-arm-static /bin/sh -i /debootstrap/debootstrap --second-stage
2)更新目標系統apt源 及 fstab
cat <<EOT > etc/apt/sources.list deb http://http.debian.net/debian $distro main contrib non-free deb-src http://http.debian.net/debian $distro main contrib non-free deb http://http.debian.net/debian $distro-updates main contrib non-free deb-src http://http.debian.net/debian $distro-updates main contrib non-free deb http://security.debian.org/debian-security $distro/updates main contrib non-free deb-src http://security.debian.org/debian-security $distro/updates main contrib non-free EOT
cat <<EOT >> etc/fstab none /tmp tmpfs defaults,noatime,mode=1777 0 0 # if you have a separate boot partition ${card}${p}1 /boot vfat defaults 0 0 EOT
後續
exit cp /etc/resolv.conf /mnt/etc chroot /mnt export LANG=C apt-get update # set up 'apt cat <<END > /etc/apt/apt.conf.d/71-no-recommends APT::Install-Recommends "0"; APT::Install-Suggests "0"; END # set up locales (Debian) - dpkg scripts tend to complain otherwise apt-get install locales dpkg-reconfigure locales # Choose en_US.UTF-8 for both prompts, or whatever you want. export LANG=en_US.UTF-8 # install your favourite packages here apt-get install nvi ; apt-get remove nano # set root password - otherwise you won't be able to log in passwd exit # cleanup rm /mnt/usr/bin/qemu-arm-static /mnt/etc/resolv.conf # ensure hostname has not carried over from your build host echo something > /mnt/etc/hostname # enable serial console (Debian/sysvinit way) echo T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt100 >> etc/inittab # enable serial console (Ubuntu/upstart way - TBD) umount /mnt
參考:https://forum.armbian.com/index.php/topic/6-how-to-build-my-own-image-or-kernel/