Linux系统编译生成镜像流程
- 调试
- 2024-11-15
- 201热度
- 0评论
编译内核
清除内核
命令
${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中的内容为要打包的文件。