编译打包介绍
1. 编译目录和config介绍¶
编译目录为project,编译脚本为project下的Makefile,编译配置脚本在/project/configs/verify/defconfigs,编译配置脚本目录如下:
上图为平台编译配置脚本,以dispcam_pcupid.spinand.glibc-10.2.1-squashfs.ssm001a.1024.bga_ddr4_riscv_defconfig为例;
dispcam代表产品线;
spinand代表spinand flash启动;
glibc代表c库使用的是glibc;
10.2.1代表toolchain版本号;
squashfs代表rootfs的文件系统类型;
ssm001x代表不同封装的芯片;
riscv代表带有riscv
2. 编译执行命令¶
(1)cd project; make dispcam_pcupid.spinand.glibc-10.2.1-squashfs.ssm001a.1024.bga_ddr4_riscv_defconfig;
执行完之后会在/project/configs目录下会重新生成current.configs;current.configs里能找到uboot,kernel编译的config文件和编译文件信息,sdk编译脚本,rootfs制作脚本等参数信息;
(2)工程编译分为整包编译,单独编译kernel,单独编译sdk,单独编译打包三种方式;具体执行指令如下所示:
(3)编译打包完成在/project/image/output/images会生成相应bin文件
3. 脚本配置介绍¶
分区变更分为分区制作、打包和分区烧录脚本制作这两部分。如下图所示:
(1)xxx.partition.config:
脚本所在位置:project/image/configs/general/
分区配置信息的总脚本,所有与分区调整相关的代码都在这个config文件中实现,这个config文件会有很多份,每个不同的chip、不同存储介质都会有各自的分区config文件。
(2)分区打包脚本:
脚本所在位置:project/image/packaging/common/
rootfs.mk:根文件系统打包脚本,像busybox的解压、init.d/rcS制作、/etc/profile制作均在rootfs.mk中处理
misc.mk:misc分区打包脚本,像屏参文件、boot logo相关的均在misc.mk处理;
miservice.mk:miservice分区打包脚本,像ko、lib文件、ipu相关文件等都是在miservice.mk处理;
customer.mk:customer分区打包脚本,用于放置客制化信息,当前会放一些工具类以及sample code;
(3)特殊分区:
KERNEL、uboot、IPL、misc、cis等分区属于特殊分区,这些分区没有特别的文件系统,所以无法在Makefile脚本中做集中处理,必须by case去处理。因此添加一个特殊的分区要了解以下步骤。 以kernel分区为例:
image.mk中需要写上分区打包的脚本命令
kernel_nofsimage: @echo [[$@]] cp -rvf $($(patsubst %_nofsimage,%,$@)$(RESOUCE)) (IMAGEDIR)/$(patsubst %_nofsimage,%,$@)
script.mk中写上分区烧录脚本生成的命令:
kernel_$(FLASH_TYPE)__script: @echo "# <- this is for comment / total file size must be less than 4KB" > $(SCRIPTDIR)/[[kernel.$(FILE_TYPE) @echo $(LOAD_CMD) $(DOWNLOADADDR) kernel >> $(SCRIPTDIR)/[[kernel.$(FILE_TYPE) @echo $(FLASH_PROBE) >> $(SCRIPTDIR)/[[kernel.$(FILE_TYPE) if [ -n "$(kernel$(PATNAME))" ]; then \ for i in $(kernel$(PATNAME));do \ echo $(FLASH_ERASE_PART) $$i >> $(SCRIPTDIR)/[[kernel.$(FILE_TYPE); \ echo $(FLASH_WRITE_PART) $(DOWNLOADADDR) $$i \$${filesize} >> $(SCRIPTDIR)/[[kernel.$(FILE_TYPE); \ done; \ else \ echo $(FLASH_ERASE_PART) KERNEL >> $(SCRIPTDIR)/[[kernel.$(FILE_TYPE); \ echo $(FLASH_WRITE_PART) $(DOWNLOADADDR) KERNEL \$${filesize} >> $(SCRIPTDIR)/[[kernel.$(FILE_TYPE); \ fi; @$(call docuscmd,"$(kernel$(CUSCMD))",$(SCRIPTDIR)/[[kernel.$(FILE_TYPE)) @$(call doblkenv,"$(kernel$(BLKENV))",$(SCRIPTDIR)/[[kernel.$(FILE_TYPE),1) @echo "% <- this is end of file symbol" >> $(SCRIPTDIR)/[[kernel.$(FILE_TYPE) @echo kernel-image done!!!