rootfs编译步骤2解析
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 到 /etccustomer 分区
– 修改 demo.shmiservice 分区
– 复制主处理器特有库文件
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/(PROJROOT)/release/customertailor/(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/(LIBDIRPATH)/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解析相关推荐
- kernel编译步骤解析
1 编译步骤 declare -x ARCH="arm" declare -x CROSS_COMPILE="arm-linux-gnueabihf-" #ma ...
- 一文带你梳理Clang编译步骤及命令
摘要: 本文简单介绍了Clang编译过程中涉及到的步骤和每个步骤的产物,并简单分析了部分影响预处理和编译成功的部分因素. 本文分享自华为云社区<Clang编译步骤及命令梳理>,作者:mai ...
- MT7601U-STA驱动程序编译步骤
MT7601U-STA驱动程序编译步骤 说明:因为自linux4.2版本以后,mt7601u的驱动已经集成在kernel的linux-4.9.y/drivers/net/wireless/mediat ...
- Android 编译(1)——Android编译步骤梳理
文章目录 Android编译步骤 envsetup.sh vendorsetup.sh add_lunch_combo命令 lunch命令 Android makefile inherit函数 And ...
- FFmpeg简介及在vc2010下编译步骤
FFmpeg是一个开源的多媒体库,最新版本是2.4.3,它的License是LGPL或GPL.FFmpeg可以用来记录.转换数字音频.视频,并能将其转换为流的开源计算机程序.它包括了音/视频编码库li ...
- OpenSSL简介及在Windows、Linux、Mac系统上的编译步骤
OpenSSL介绍:OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. SSL是SecureSock ...
- 简单实例讲解linux的module模块编译步骤
简单实例讲解linux的module模块编译步骤 (2014-10-24 10:19:17) 标签: module linux 分类:Linux/Unix 本文将直接了当的带你进入linux的模块编译 ...
- weka源码编译步骤
weka源码编译步骤 1 安装JDK环境和Java开发环境,我用的是MyEclipse. 2 安装WEKA(安装不带JRE的WEKA即可). 3 重新编译: 3.1 创建工作目录.新建一个WEKA-R ...
- Android APK反编译步骤
反编译步骤 1.通过Android Killer 打开apk,自动开始分析 2.分析结束后,在分析好的工程上右键->打开方式->打开文件位置 在文件夹ProjectSrc中有文件class ...
最新文章
- mdkstc系列器件支持包下载_WPS Office 2019 For Linux(2020/10/21)更新-支持PDF编辑
- 基础知识:编程语言介绍、Python介绍、Python解释器安装、运行Python解释器的两种方式、变量、数据类型基本使用
- Excel多因素不重复方差分析
- [转载][工具]Secure CRT 自动记录日志和时间戳功能配置的方法
- vue2使用$set()使对象新增属性后触发视图更新
- php 废弃,PHP 7 废弃特性
- spark学习-37-Spark的SortShuffleManager
- eclipse返回值快捷键
- 图书管理系统E-R图转关系图
- 画法几何与土木水利工程制图2020年期末考题思路
- 怎样将生成的pdf文件转为eps文件
- 哈佛幸福课个人使用精华
- adb 隐藏/删除 app
- antd-vue表格内部换行
- python的下载安装以及两种打开方式
- 解决 Office 2007/2010/2013 安装错误:1402
- php filter 文件包含,文件包含lfi
- HTML -超文本标记语言
- php+三码合一,三码合一,解决php mysql乱码
- JZOJ 3388. 【NOIP2013模拟】绿豆蛙的归宿
热门文章
- Spring Boot实现发送QQ邮件
- linux 接收中文数据乱码,linux中文乱码问题的解决方法
- cpa机考可以用计算机吗,CPA机考,不让带计算器该如何做?
- 传统推荐模型(一)协同过滤算法_UserCF和ItemCF
- Information Extraction over Structured Data: Question Answering with Freebase【论文笔记】
- IE6下载文件名过长导致乱码问题的解决方案
- 阿里云HPC助力新制造 | 上汽仿真计算云SSCC
- 14.[STM32]数电学了三八译码器一脸懵,一文带你从理论到实践
- CG快报 2011.9.11
- 公司计算机d盘怎么设置共享,win7系统怎么共享d盘|win7系统共享d盘的方法