1 编译步骤

make clean
make image-nocheck

获取image/output/images文件夹为期望文件

2 编译过程

makefile : image-nocheck: symbol_link release image_all warning_message

2.1 symbol_link

symbol_link: kbuild/$(KERNEL_VERSION)/.config
kbuild/$(KERNEL_VERSION)/.config:$(MAKE) -f kbuild/$(KERNEL_VERSION)/kbuild.mk symbol_link

调用 kbuild.mk 的 symbol_link,在kbuild/4.9.84下生成必要的链接文件

ln -sf /opt/project/kbuild/4.9.84/i2m/arch /opt/project/kbuild/4.9.84/
ln -sf /opt/project/kbuild/4.9.84/i2m/drivers /opt/project/kbuild/4.9.84/
ln -sf /opt/project/kbuild/4.9.84/i2m/include /opt/project/kbuild/4.9.84/
ln -sf /opt/project/kbuild/4.9.84/i2m/scripts /opt/project/kbuild/4.9.84/
ln -sf /opt/project/kbuild/4.9.84/i2m/Makefile /opt/project/kbuild/4.9.84/
ln -sf /opt/project/kbuild/4.9.84/i2m/configs/nvr/011A/glibc/8.2.1/spinand/include/* /opt/project/kbuild/4.9.84/include/
ln -sf /opt/project/kbuild/4.9.84/i2m/configs/nvr/011A/glibc/8.2.1/spinand/Module.symvers /opt/project/kbuild/4.9.84/
ln -sf /opt/project/kbuild/4.9.84/i2m/configs/nvr/011A/glibc/8.2.1/spinand/.config /opt/project/kbuild/4.9.84/

2.2 release

无对应操作。

2.3 image_all

image_all: image_clean$(MAKE) -C image all./split_partion.sh
image_clean:$(MAKE) -C image clean

主要是对image目录进行编译。

2.3.1 ->image->clean

删除整个output目录

OUTPUTDIR:=$(CURDIR)/output
clean:
rm -rf $(OUTPUTDIR)

2.3.2 ->image->all

  • 建立output/images/boot 层级目录
  • 编译 rootfs,rootfs_recovery ,images, boot_images,scripts
all:@mkdir -p $(OUTPUTDIR)@mkdir -p $(IMAGEDIR)@mkdir -p $(IMAGEDIR)/boot
ifeq ($(FLASH_TYPE), spinand-ramdisk)$(MAKE) ramdisk
endif$(MAKE) rootfs$(MAKE) rootfs_recovery$(MAKE) images$(MAKE) boot_images$(MAKE) scripts

2.3.3 ->image->rootfs

ifeq ($(BOOT_TYPE), fastboot)include configs/$(CHIP)/rootfs_fastboot.mk
elseinclude configs/$(CHIP)/rootfs.mk
endif

在rootfs.mk 中定义了 rootfs:root app。

2.3.3.1 ->image->rootfs->root

  • rootfs 分区
    – 解压 rootfs/rootfs.tar.gz 到 rootfs
    – 复制 rootfs_add_files 到 rootfs
    – 修改 sshd_config
    – 修改 /etc/ssh/sshd_config
    – 修改 /etc/inittab
    – 修改 /etc/mdev.conf
    – 修改 /etc/init.d/rcS
    – 复制并配置 fw_printenv,fw_setenv 到 /etc

  • customer 分区
    – 修改 demo.sh

  • miservice 分区
    – 复制主处理器特有库文件

cp /opt/project/release/nvr/i2m/common/glibc/8.2.1/mi_libs/dynamic/* /opt/project/image/output/miservice/config/lib/
cp /opt/project/release/nvr/i2m/common/glibc/8.2.1/ex_libs/dynamic/* /opt/project/image/output/miservice/config/lib/

– 复制主处理器特有配置文件 到 config

 cp -rf /opt/project/board/ini/LCM /opt/project/image/output/miservice/configcp -rf /opt/project/board/i2m/SSC011A-S01A/config/fbdev.ini  /opt/project/image/output/miservice/configcp -vf /opt/project/board/i2m/mmap/MMAP_I2M_128M.h  /opt/project/image/output/miservice/config/mmap.inicp -rvf /opt/project/release/nvr/i2m/common/glibc/8.2.1/bin/config_tool/*  /opt/project/image/output/miservice/configcd  /opt/project/image/output/miservice/config; chmod +x config_tool; ln -sf config_tool dump_config; ln -sf config_tool dump_mmapcp -rf /opt/project/board/i2m/vdec_fw  /opt/project/image/output/miservice/config/

– 依据 kernel_mod_list 文件列表复制kbuild/4.9.84/i2m/configs/nvr/011A/glibc/8.2.1/spinand/modules/ 特定modules ko文件 到 config/modules/4.9.84/
– 依据 misc_mod_list 文件列表复制 release/nvr/i2m/common/glibc/8.2.1/modules/4.9.84/ 特定modules ko文件 到 config/modules/4.9.84/
– 依据 .mods_depend 文件列表复制release/nvr/i2m/common/glibc/8.2.1/modules/4.9.84/ 特定modules ko文件 到 config/modules/4.9.84/
– 复制 gpio_led_heartbeat.ko 到 config/modules/4.9.84/
– 依据 .misc_mod_list_late 文件列表复制release/nvr/i2m/common/glibc/8.2.1/modules/4.9.84/ 特定modules ko文件 到 config/modules/4.9.84/
– 复制 PHY_TEST 和 interface_wlan 的相应工具,依据release/customer_tailor/$(CUSTOMER_TAILOR)开关变量

  • appconfigs 分区
    – 从miservice分区获取 wifi相应配置 wpa_supplicant.conf
    – 复制显示相应配置 /board/i2m/SSC011A-S01A/config/model/LCM.ini

2.3.3.2 ->image->rootfs->app

-include $(PROJ_ROOT)/…/sdk/verify/application/app.mk
依据 (PROJROOT)/release/customertailor/(PROJ_ROOT)/release/customer_tailor/(PROJR​OOT)/release/customert​ailor/(CUSTOMER_TAILOR)中开关进行对应应用的编译,如:

ifeq ($(verify_disp_init),enable)
ifeq ($(PROJECT),2D07)include $(APPLICATION_PATH)/disp_init/image.mk
endif

2.3.4 ->image->rootfs_recovery

-include configs/$(CHIP)/rootfs_recovery.mk
rootfs_recovery 功能需要被开启才生效。

  • 解压 cd rootfs; tar xf rootfs.tar.gz
  • 解压 tar xf busybox/$(BUSYBOX).tar.gz
  • 解压 tar xf (LIBDIRPATH)/package/(LIB_DIR_PATH)/package/(LIBD​IRP​ATH)/package/(LIBC).tar.gz
  • 建立 /etc/reboot_to_recovery.sh
  • 建立 /etc/reboot_to_normal.sh
  • 如开启 OTA功能,则在/etc/init.d/rcS加入自动挂载OTA分区

2.3.5 ->image->images

include image.mk

依据 configs/current.configs 定义的
IMAGE_CONFIG = spinand.ubifs.p2.partition.config 生成对应的文件。
里面有对应的分区列表和分区配置

IMAGE_LIST = cis ipl ipl_cust uboot logo kernel rootfs miservice customer appconfigsrootfs$(RESOUCE)   = $(OUTPUTDIR)/rootfs
rootfs$(FSTYPE)    = ubifs
rootfs$(PATSIZE)   = 0xC200000
rootfs$(BOOTENV)   = console=ttyS0,115200 ubi.mtd=UBI,2048 root=ubi:rootfs rw rootfstype=ubifs init=/linuxrc rootwait=1
  • rootfs:
./build/mkfs.ubifs -F -r /opt/project/image/output/rootfs -o /opt/project/image/output/images/rootfs.ubifs -m 0x800 -e 126976 -c  `./build/calc_nand_mfs.sh rootfs 0x800 0x20000 0 0xC200000`
  • miservice
./build/mkfs.ubifs -F -r /opt/project/image/output/miservice/config -o /opt/project/image/output/images/miservice.ubifs -m 0x800 -e 126976 -c `./build/calc_nand_mfs.sh miservice 0x800 0x20000 0 0xA00000`
  • customer
./build/mkfs.ubifs -F -r /opt/project/image/output/customer -o /opt/project/image/output/images/customer.ubifs -m 0x800 -e 126976 -c `./build/calc_nand_mfs.sh customer 0x800 0x20000 0 0xA00000`
  • appconfigs
./build/mkfs.ubifs -F -r /opt/project/image/output/appconfigs -o /opt/project/image/output/images/appconfigs.ubifs -m 0x800 -e 126976 -c `./build/calc_nand_mfs.sh appconfigs 0x800 0x20000 0 0x400000`
  • cis_nofsimage 即 uboot分区
cp -vf /opt/project/board/i2m/boot/spinand/partition/* /opt/project/image/output/images/boot/
/opt/project/image/makefiletools/bin/pnigenerator -s 64 -p 2048 -b 64 -k 1024 -u 8 -l 0x20000 -t "0x140000(CIS),0x20000@0x140000(IPL0)2,0x20000(IPL1)2,0x20000(IPL_CUST0)2,0x20000(IPL_CUST1)2,0x40000(UBOOT0)4,0x40000(UBOOT1)4,0x20000(ENV0)1,0x20000(ENV1)1" -y "0x20000(KEY_CUST),0x60000(LOGO),0x500000(KERNEL),0x500000(RECOVERY),-(UBI)" -o /opt/project/image/output/images/boot/PARTINFO.pni
dd if=/dev/zero bs=2k count=2 | tr '\000' '\377' > /opt/project/image/output/images/cis.bin
dd if=/opt/project/image/output/images/boot/GCIS.bin of=/opt/project/image/output/images/cis.bin bs=2k count=1 conv=notrunc seek=0
dd if=/opt/project/image/output/images/boot/PARTINFO.pni of=/opt/project/image/output/images/cis.bin bs=2k count=1 conv=notrunc seek=1
cat /opt/project/image/output/images/boot/SPINANDINFO.sni >> /opt/project/image/output/images/cis.bin
  • ipl_nofsimage即 uboot分区
cp -vf /opt/project/board/i2m/boot/ipl/IPL.bin /opt/project/image/output/images/boot/
cp -vf /opt/project/board/i2m/boot/ipl/IPL.bin /opt/project/image/output/images/ipl_s.bin
  • ipl_cust_nofsimage即 uboot分区
cp -vf /opt/project/board/i2m/boot/ipl/IPL_CUST.bin /opt/project/image/output/images/boot/
cp -vf /opt/project/board/i2m/boot/ipl/IPL_CUST.bin /opt/project/image/output/images/ipl_cust_s.bin
  • uboot_nofsimage 即 uboot分区
cp -vf /opt/project/board/i2m/boot/spinand/uboot/u-boot_spinand.xz.img.bin /opt/project/image/output/images/boot/
cp -vf /opt/project/board/i2m/boot/spinand/uboot/u-boot_spinand.xz.img.bin /opt/project/image/output/images/uboot_s.bin
  • logo_nofsimage 即 开机画面
/opt/project/image/makefiletools/bin/dispcfggen -c -o /opt/project/image/output/images/logo -p 0x7c00000 -s 0x300000 -d CC0702I50R
/opt/project/image/makefiletools/bin/logogen -a -i /opt/project/board/ini/misc/sigmastar1024_600.jpg -o /opt/project/image/output/images/logo
/opt/project/image/makefiletools/bin/logogen -a -i /opt/project/board/ini/misc/upgrade.jpg -o /opt/project/image/output/images/logo
  • kernel_nofsimage 内核分区
cp -rvf /opt/project/release/nvr/i2m/011A/glibc/8.2.1/bin/kernel/spinand/uImage.xz /opt/project/image/output/images/kernel

2.3.6 ->image->boot_images

include boot.mk

spinand.ubifs.p2.partition.boot.config 定义了
里面有对应的分区列表和分区配置
BOOT_IMAGE_LIST = cis ipl ipl_cust uboot
这里只需要重新制作二进制镜像时才用到,而工程中对应image均不需要在该阶段制作。

2.3.6 ->image->scripts

include configs/$(CHIP)/script_nand.mk

生成更新时用到的scrips/目录下的自动化文件,如:[[kernel.es

kernel_$(FLASH_TYPE)__script:@echo "# <- this is for comment / total file size must be less than 4KB" > $(SCRIPTDIR)/[[kernel.es@echo tftp $(TFTPDOWNLOADADDR) kernel >> $(SCRIPTDIR)/[[kernel.es@echo nand erase.part KERNEL >> $(SCRIPTDIR)/[[kernel.es@echo nand write.e $(TFTPDOWNLOADADDR) KERNEL \$${filesize} >> $(SCRIPTDIR)/[[kernel.es@echo nand erase.part RECOVERY >> $(SCRIPTDIR)/[[kernel.es@echo nand write.e $(TFTPDOWNLOADADDR) RECOVERY \$${filesize} >> $(SCRIPTDIR)/[[kernel.es@echo "% <- this is end of file symbol" >> $(SCRIPTDIR)/[[kernel.es@echo kernel-image done!!!

2.4 ./split_partion.sh

分析 customer.ubifs 大小,如果超过 36700160则进行拆分。

2.5 warning_message

目的:不存在git相应文件,不进行任何操作。如果有git,它大致是判断你是否对release/include进行了修改,进行告警说不要修改MI的自有头文件而已。

warning_message:@if [ -d ".git" ]; then \cd  release/include && \git status -s . | \awk -F' ' '{a = a "\033[7;34;42m""release/include/"$$2"\033[0m\n"} END {if(a){ \print "\033[5;41;33mWARNING!!!! You CAN NOT MODIFY HEAD FILES ,NEED MI OWNER TO REVIEW THE FOLLOWING INCONSISTENT HEAD FILES!!!\033[0m"; \print "\033[5;41;33mIF YOU WANT DEBUG ONLY, pelase using command :[[[ make image-nocheck ]]] INSTEADED!!!\033[0m"; \print a;}}'; \fi;

rootfs编译步骤2解析相关推荐

  1. kernel编译步骤解析

    1 编译步骤 declare -x ARCH="arm" declare -x CROSS_COMPILE="arm-linux-gnueabihf-" #ma ...

  2. 一文带你梳理Clang编译步骤及命令

    摘要: 本文简单介绍了Clang编译过程中涉及到的步骤和每个步骤的产物,并简单分析了部分影响预处理和编译成功的部分因素. 本文分享自华为云社区<Clang编译步骤及命令梳理>,作者:mai ...

  3. MT7601U-STA驱动程序编译步骤

    MT7601U-STA驱动程序编译步骤 说明:因为自linux4.2版本以后,mt7601u的驱动已经集成在kernel的linux-4.9.y/drivers/net/wireless/mediat ...

  4. Android 编译(1)——Android编译步骤梳理

    文章目录 Android编译步骤 envsetup.sh vendorsetup.sh add_lunch_combo命令 lunch命令 Android makefile inherit函数 And ...

  5. FFmpeg简介及在vc2010下编译步骤

    FFmpeg是一个开源的多媒体库,最新版本是2.4.3,它的License是LGPL或GPL.FFmpeg可以用来记录.转换数字音频.视频,并能将其转换为流的开源计算机程序.它包括了音/视频编码库li ...

  6. OpenSSL简介及在Windows、Linux、Mac系统上的编译步骤

    OpenSSL介绍:OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. SSL是SecureSock ...

  7. 简单实例讲解linux的module模块编译步骤

    简单实例讲解linux的module模块编译步骤 (2014-10-24 10:19:17) 标签: module linux 分类:Linux/Unix 本文将直接了当的带你进入linux的模块编译 ...

  8. weka源码编译步骤

    weka源码编译步骤 1 安装JDK环境和Java开发环境,我用的是MyEclipse. 2 安装WEKA(安装不带JRE的WEKA即可). 3 重新编译: 3.1 创建工作目录.新建一个WEKA-R ...

  9. Android APK反编译步骤

    反编译步骤 1.通过Android Killer 打开apk,自动开始分析 2.分析结束后,在分析好的工程上右键->打开方式->打开文件位置 在文件夹ProjectSrc中有文件class ...

最新文章

  1. mdkstc系列器件支持包下载_WPS Office 2019 For Linux(2020/10/21)更新-支持PDF编辑
  2. 基础知识:编程语言介绍、Python介绍、Python解释器安装、运行Python解释器的两种方式、变量、数据类型基本使用
  3. Excel多因素不重复方差分析
  4. [转载][工具]Secure CRT 自动记录日志和时间戳功能配置的方法
  5. vue2使用$set()使对象新增属性后触发视图更新
  6. php 废弃,PHP 7 废弃特性
  7. spark学习-37-Spark的SortShuffleManager
  8. eclipse返回值快捷键
  9. 图书管理系统E-R图转关系图
  10. 画法几何与土木水利工程制图2020年期末考题思路
  11. 怎样将生成的pdf文件转为eps文件
  12. 哈佛幸福课个人使用精华
  13. adb 隐藏/删除 app
  14. antd-vue表格内部换行
  15. python的下载安装以及两种打开方式
  16. 解决 Office 2007/2010/2013 安装错误:1402
  17. php filter 文件包含,文件包含lfi
  18. HTML -超文本标记语言
  19. php+三码合一,三码合一,解决php mysql乱码
  20. JZOJ 3388. 【NOIP2013模拟】绿豆蛙的归宿

热门文章

  1. Spring Boot实现发送QQ邮件
  2. linux 接收中文数据乱码,linux中文乱码问题的解决方法
  3. cpa机考可以用计算机吗,CPA机考,不让带计算器该如何做?
  4. 传统推荐模型(一)协同过滤算法_UserCF和ItemCF
  5. Information Extraction over Structured Data: Question Answering with Freebase【论文笔记】
  6. IE6下载文件名过长导致乱码问题的解决方案
  7. 阿里云HPC助力新制造 | 上汽仿真计算云SSCC
  8. 14.[STM32]数电学了三八译码器一脸懵,一文带你从理论到实践
  9. CG快报 2011.9.11
  10. 公司计算机d盘怎么设置共享,win7系统怎么共享d盘|win7系统共享d盘的方法