Linux系统编译生成镜像流程
编译内核
清除内核
命令
${MAKE} O= mrproper
示例
make CROSS_COMPILE=riscv32-unknown-linux- ARCH=riscv -j16
O=kernel/build KERNEL_SRC=kernel/linux-5.4
INSTALL_MOD_PATH=kernel/staging O= mrproper
配置defconfig
命令
defconfig:${MAKE} defconfig KBUILD_DEFCONFIG=${LICHEE_KERN_DEFCONF_RELATIVE}
示例
make CROSS_COMPILE=nds32le-linux-glibc-v5d/bin/riscv32-unknown-linux- ARCH=riscv -j16
O=kernel/build KERNEL_SRC=kernel/linux-5.4
INSTALL_MOD_PATH=kernel/staging defconfig
KBUILD_DEFCONFIG=linux-5.4/xxx_defconfig
编译
${MAKE} $MAKE_ARGS
示例
MAKE_ARGS+=' INSTALL_HDR_PATH=kernel/build/user_headers headers_install'
$COMP_TYPE = Image.bz2/Image.lz4 根据LICHEE_COMPRESS是bzip2,gzip等。这里的rv选择的是Image.gz
MAKE_ARGS+$COMP_TYPE
make CROSS_COMPILE=nds32le-linux-glibc-v5d/bin/riscv32-unknown-linux- ARCH=riscv -j16
O=kernel/build KERNEL_SRC=kernel/linux-5.4
INSTALL_MOD_PATH=kernel/staging modules all
INSTALL_HDR_PATH=kernel/build/user_headers headers_install Image.gz
安装modules
命令
${MAKE} modules_install
示例
make CROSS_COMPILE=nds32le-linux-glibc-v5d/bin/riscv32-unknown-linux- ARCH=riscv -j16
O=kernel/build KERNEL_SRC=kernel/linux-5.4
INSTALL_MOD_PATH=kernel/staging modules_install
额外编译
单独额外编译的模块
make CROSS_COMPILE=nds32le-linux-glibc-v5d/bin/riscv32-unknown-linux- ARCH=riscv -j16
O=kernel/build KERNEL_SRC=kernel/linux-5.4
INSTALL_MOD_PATH=kernel/staging -C kernel/linux-5.4/xxx/modules/nand
M=kernel/linux-5.4/xxx/modules/nand -j1
设备树
cpp \
-Wp,-MD,${dep}/.${outname}.d.pre.tmp \
-nostdinc \
-I ${LICHEE_KERN_DIR}/include \
-I ${LICHEE_KERN_DIR}/bsp/include \
-I ${die_dtsi_path} \
-I ${chip_dtsi_path} \
-undef \
-D__DTS__ \
-x assembler-with-cpp \
-o ${dep}/.${outname}.dts.tmp \
${dtsfile}
$DTC \
-O dtb \
-o ${outpath}/${outname} \
-W no-unit_address_vs_reg \
-W no-unit_address_format \
-W no-unique_unit_address \
-W no-graph_child_address \
-W no-simple_bus_reg \
-b 0 \
-@ \
-i ${LICHEE_CHIP_CONFIG_DIR}/configs/default/${LICHEE_KERN_VER} \
-d ${dep}/.${outname}.d.dtc.tmp ${dep}/.${outname}.dts.tmp
示例
cpp -Wp,-MD,kernel/staging/dts_dep/.xxx.dtb.d.pre.tmp -nostdinc -I
kernel/linux-5.4/include -I kernel/linux-5.4/bsp/include
-I bsp/configs/linux-5.4 -I configs/default
-undef -D__DTS__ -x assembler-with-cpp -o kernel/staging/dts_dep/.xxx.dtb.dts.tmp
configs/perf2/board.dts
scripts/dtc/dtc -O dtb -o kernel/staging/xxx.dtb
-W no-unit_address_vs_reg -W no-unit_address_format -W no-unique_unit_address -W no-graph_child_address -W no-simple_bus_reg -b 0 -@ -i
configs/default/linux-5.4
-d kernel/staging/dts_dep/.xxx.dtb.d.dtc.tmp
kernel/staging/dts_dep/.xxx.dtb.dts.tmp
将内核与dtb打包生成img
${MKBOOTIMG} --kernel ${BIMAGE} \
$(check_whether_use_ramdisk && echo "--ramdisk $RAMDISK") \
--board ${CHIP}_${LICHEE_ARCH} \
--base ${BASE} \
--kernel_offset ${KERNEL_OFFSET} \
$(check_whether_use_ramdisk && echo "--ramdisk_offset ${RAMDISK_OFFSET}") \
--dtb ${DTB} \
--dtb_offset ${DTB_OFFSET} \
--header_version 2 \
-o $STAGING_DIR/${IMAGE_NAME}
示例
tools/pack/pctools/linux/android/mkbootimg --kernel kernel/staging/Image.gz
--board xxx300i_riscv32 --base 0x80000000 --kernel_offset 0x0 --dtb kernel/staging/sunxi.dtb
--dtb_offset 10485760 --header_version 2 -o kernel/staging/boot.img
根文件系统
制作根文件系统
mksquashfs4 [rootfs-dir] [img-name]
-noappend:不将squashfs选项传递给内核
-root-owned:设置root目录为root所有
-comp xz:使用xz压缩算法
-b 256k:设置块大小为256KB
-p '/dev d 755 0 0' 和 -p '/dev/console c 600 0 0 5 1':设置文件系统的权限和所有权。
-processors 1:使用一个处理器进行压缩。
使用dd of生成rootfs.img
dd if=root.squashfs
of=openwrt/rootfs.img bs=128k conv=sync
编译uboot
略
打包整个镜像
命令: dragonxx imagexx.cfg partitionxx.fex
使用打包工具dragonxx进行打包,其中image.cfg和partition.fex中的内容为要打包的文件。