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 "--ramdiskRAMDISK") \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
        --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中的内容为要打包的文件。