注解根文件系统制作过程

    百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码
    博客输出站点(国内):http://weharmonyos.com
    博客输出站点(国外):https://weharmony.github.io
    注解文件系统:https://gitee.com/weharmony/third_party_NuttX
    注解协议栈:https://gitee.com/weharmony/third_party_lwip
    注解编译子系统:https://gitee.com/weharmony/build_lite
上级 a4faf72f
......@@ -27,18 +27,18 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
LITEOSTOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
LITEOSTOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi) #获取当前目录
export OS=$(shell uname -s)
ifneq ($(OS), Linux)
LITEOSTOPDIR := $(shell dirname $(subst \,/,$(LITEOSTOPDIR))/./)
endif
LITEOSTHIRDPARTY := $(LITEOSTOPDIR)/../../third_party
LITEOSTHIRDPARTY := $(LITEOSTOPDIR)/../../third_party #找到 third_party 目录
export LITEOSTOPDIR
export LITEOSTHIRDPARTY
RM = -rm -rf
RM = -rm -rf #宏定义
MAKE = make
__LIBS = libs
APPS = apps
......@@ -51,7 +51,7 @@ LITEOS_PLATFORM_BASE = $(LITEOSTOPDIR)/platform
export CONFIG_=LOSCFG_
ifeq ($(PRODUCT_PATH),)
export PRODUCT_PATH=$(LITEOSTOPDIR)/../../device/hisilicon/drivers
export PRODUCT_PATH=$(LITEOSTOPDIR)/../../device/hisilicon/drivers #找到 device 目录
endif
ifeq ($(shell which menuconfig),)
......@@ -59,7 +59,7 @@ $(shell pip install --user kconfiglib >/dev/null)
endif
$(shell env CONFIG_=$(CONFIG_) PRODUCT_PATH=$(PRODUCT_PATH) olddefconfig >/dev/null)
-include $(LITEOSTOPDIR)/tools/build/config.mk
-include $(LITEOSTOPDIR)/tools/build/config.mk #定义了各种变量
ifeq ($(LOSCFG_STORAGE_SPINOR), y)
FSTYPE = jffs2
......@@ -125,10 +125,10 @@ endif
#-----need move when make version-----#
##### make lib #####
$(__LIBS): $(OUT) $(CXX_INCLUDE)
$(__LIBS): $(OUT) $(CXX_INCLUDE) #编译库文件
$(OUT): $(LITEOS_MENUCONFIG_H)
$(HIDE)mkdir -p $(OUT)/lib
$(HIDE)mkdir -p $(OUT)/lib #创建 ../lib 目录 , 将生成 *.a 文件 ,
$(HIDE)$(CC) -I$(LITEOSTOPDIR)/kernel/base/include -I$(LITEOSTOPDIR)/../../$(LOSCFG_BOARD_CONFIG_PATH) \
-I$(LITEOS_PLATFORM_BASE)/include -imacros $< -E $(LITEOS_PLATFORM_BASE)/board.ld.S \
-o $(LITEOS_PLATFORM_BASE)/board.ld -P
......@@ -149,29 +149,29 @@ menuconfig:
$(LITEOS_MENUCONFIG_H): .config
$(HIDE)genconfig
#编译内核的各个目标文件
$(LITEOS_TARGET): $(__LIBS) sysroot
$(HIDE)touch $(LOSCFG_ENTRY_SRC)
#逐个编译子目录中的 makefile
$(HIDE)for dir in $(LITEOS_SUBDIRS); \
do $(MAKE) -C $$dir all || exit 1; \
done
# 生成 liteos.map
$(LD) $(LITEOS_LDFLAGS) $(LITEOS_TABLES_LDFLAGS) $(LITEOS_DYNLDFLAGS) -Map=$(OUT)/$@.map -o $(OUT)/$@ --start-group $(LITEOS_LIBDEP) --end-group
# $(SIZE) -t --common $(OUT)/lib/*.a >$(OUT)/$@.objsize
$(OBJCOPY) -O binary $(OUT)/$@ $(LITEOS_TARGET_DIR)/$@.bin
$(OBJDUMP) -t $(OUT)/$@ |sort >$(OUT)/$@.sym.sorted
$(OBJDUMP) -d $(OUT)/$@ >$(OUT)/$@.asm
$(OBJCOPY) -O binary $(OUT)/$@ $(LITEOS_TARGET_DIR)/$@.bin #生成 liteos.bin 文件
$(OBJDUMP) -t $(OUT)/$@ |sort >$(OUT)/$@.sym.sorted #生成 liteos.sym.sorted 文件
$(OBJDUMP) -d $(OUT)/$@ >$(OUT)/$@.asm # 生成 liteos.asm文件
# $(NM) -S --size-sort $(OUT)/$@ >$(OUT)/$@.size
# 编译多个应用程序
$(APPS): $(LITEOS_TARGET) sysroot #依赖于 LITEOS_TARGET , sysroot
$(HIDE)$(MAKE) -C apps all #执行apps目录下Makefile 的all目标, -C代表进入apps目录,
$(APPS): $(LITEOS_TARGET) sysroot
$(HIDE)$(MAKE) -C apps all
prepare:
prepare: #准备工作,创建 musl 目录,用于拷贝 c/c++ .so库
$(HIDE)mkdir -p $(OUT)/musl
ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y)
$(HIDE)cp -f $$($(CC) --target=$(LLVM_TARGET) --sysroot=$(SYSROOT_PATH) $(LITEOS_CFLAGS) -print-file-name=libc.so) $(OUT)/musl
$(HIDE)cp -f $$($(GPP) --target=$(LLVM_TARGET) --sysroot=$(SYSROOT_PATH) $(LITEOS_CXXFLAGS) -print-file-name=libc++.so) $(OUT)/musl
ifeq ($(LOSCFG_COMPILER_CLANG_LLVM), y) #使用clang-9 ,鸿蒙默认用这个编译
$(HIDE)cp -f $$($(CC) --target=$(LLVM_TARGET) --sysroot=$(SYSROOT_PATH) $(LITEOS_CFLAGS) -print-file-name=libc.so) $(OUT)/musl #将C库复制到musl目录下
$(HIDE)cp -f $$($(GPP) --target=$(LLVM_TARGET) --sysroot=$(SYSROOT_PATH) $(LITEOS_CXXFLAGS) -print-file-name=libc++.so) $(OUT)/musl #将C++库复制到musl目录下
else
$(HIDE)cp -f $(LITEOS_COMPILER_PATH)/target/usr/lib/libc.so $(OUT)/musl
$(HIDE)cp -f $(LITEOS_COMPILER_PATH)/arm-linux-musleabi/lib/libstdc++.so.6 $(OUT)/musl
......@@ -179,16 +179,17 @@ else
$(STRIP) $(OUT)/musl/*
endif
$(ROOTFSDIR): prepare $(APPS)
$(ROOTFSDIR): prepare $(APPS) #依赖于 prepare ,APPS
$(HIDE)$(MAKE) clean -C apps
$(HIDE)$(LITEOSTOPDIR)/tools/scripts/make_rootfs/rootfsdir.sh $(OUT)/bin $(OUT)/musl $(ROOTFS_DIR) $(LITEOS_TARGET_DIR)
ifneq ($(VERSION),)
$(HIDE)$(LITEOSTOPDIR)/tools/scripts/make_rootfs/releaseinfo.sh "$(VERSION)" $(ROOTFS_DIR) $(LITEOS_TARGET_DIR)
endif
$(ROOTFS): $(ROOTFSDIR)
$(HIDE)$(LITEOSTOPDIR)/tools/scripts/make_rootfs/rootfsimg.sh $(ROOTFS_DIR) $(FSTYPE)
$(HIDE)cd $(ROOTFS_DIR)/.. && zip -r $(ROOTFS_ZIP) $(ROOTFS)
#例如:执行 make rootfs FSTYPE=jffs2 一切从这里开始
$(ROOTFS): $(ROOTFSDIR) #依赖于 ROOTFSDIR
$(HIDE)$(LITEOSTOPDIR)/tools/scripts/make_rootfs/rootfsimg.sh $(ROOTFS_DIR) $(FSTYPE) #制作镜像文件
$(HIDE)cd $(ROOTFS_DIR)/.. && zip -r $(ROOTFS_ZIP) $(ROOTFS) #打rootfs.zip包
clean:
$(HIDE)for dir in $(LITEOS_SUBDIRS); \
......
......@@ -39,13 +39,13 @@ APPS := app
all: $(APPS)
# Make
$(APPS):
ifneq ($(APP_SUBDIRS), )
$(APPS):
ifneq ($(APP_SUBDIRS), ) #进入子目录下,执行 make命令,APP_SUBDIRS由 module.mk 指定
$(HIDE) for dir in $(APP_SUBDIRS); do $(MAKE) -C $$dir || exit 1; done
endif
clean:
ifneq ($(APP_SUBDIRS), )
ifneq ($(APP_SUBDIRS), ) #进入子目录下,执行 make clean 命令
$(HIDE) for dir in $(APP_SUBDIRS); do $(MAKE) -C $$dir clean; done
endif
......
......@@ -27,26 +27,26 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
APP_SUBDIRS :=
APP_SUBDIRS := #记录子目录变量,用于编译
##build modules config##
ifeq ($(LOSCFG_SHELL), y)
APP_SUBDIRS += shell
APP_SUBDIRS += shell #添加 shell 子目录
endif
ifeq ($(LOSCFG_USER_INIT_DEBUG), y)
APP_SUBDIRS += init
APP_SUBDIRS += init #添加 init 子目录
endif
ifeq ($(LOSCFG_NET_LWIP_SACK_TFTP), y)
APP_SUBDIRS += tftp
APP_SUBDIRS += tftp #添加 tftp 子目录
endif
#only enable for qemu now
ifeq ($(LOSCFG_PLATFORM_QEMU_ARM_VIRT_CA7), y)
ifeq ($(LOSCFG_SHELL), y)
APP_SUBDIRS += mksh
APP_SUBDIRS += toybox
APP_SUBDIRS += mksh #添加 mksh 子目录
APP_SUBDIRS += toybox #添加 toybox 子目录
endif
endif
......@@ -118,11 +118,11 @@ endif
BUILD = $(OUT)/obj
MK_PATH = $(LITEOSTOPDIR)/tools/build/mk
CXX_PATH = $(LITEOSTOPDIR)/lib/cxxstl
JFFS_PATH = $(LITEOSTOPDIR)/fs/jffs2
JFFS_PATH = $(LITEOSTOPDIR)/fs/jffs2 #jffs2文件系统目录
LITEOS_SCRIPTPATH ?= $(LITEOSTOPDIR)/tools/scripts
LITEOS_LIB_BIGODIR = $(OUT)/lib/obj
LITEOS_MENUCONFIG_H = $(LITEOSTOPDIR)/config.h
LOSCFG_ENTRY_SRC = $(LITEOSTOPDIR)/kernel/common/los_config.c
LOSCFG_ENTRY_SRC = $(LITEOSTOPDIR)/kernel/common/los_config.c #内核配置文件
### include variable
MODULE = $(MK_PATH)/module.mk
......
......@@ -30,21 +30,22 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
set -e
BIN_DIR=$1
LIB_DIR=$2
BIN_DIR=$1 #放置 hb build 后生成的各种应用 bin目录
LIB_DIR=$2 #musl/*.so
ROOTFS_DIR=$3
OUT_DIR=$4
#创建根文件系统的各种目录
mkdir -p ${ROOTFS_DIR}/bin ${ROOTFS_DIR}/lib ${ROOTFS_DIR}/usr/bin ${ROOTFS_DIR}/usr/lib ${ROOTFS_DIR}/etc \
${ROOTFS_DIR}/app ${ROOTFS_DIR}/data ${ROOTFS_DIR}/proc ${ROOTFS_DIR}/dev ${ROOTFS_DIR}/data/system ${ROOTFS_DIR}/data/system/param \
${ROOTFS_DIR}/system ${ROOTFS_DIR}/system/internal ${ROOTFS_DIR}/system/external ${OUT_DIR}/bin ${OUT_DIR}/libs
if [ -d "${BIN_DIR}" ] && [ "$(ls -A "${BIN_DIR}")" != "" ]; then
cp -f ${BIN_DIR}/* ${ROOTFS_DIR}/bin
if [ -e ${BIN_DIR}/shell ] && [ "${BIN_DIR}/shell" != "${OUT_DIR}/bin/shell" ]; then
cp -f ${BIN_DIR}/shell ${OUT_DIR}/bin/shell
cp -f ${BIN_DIR}/shell ${OUT_DIR}/bin/shell #拷贝 shell 到根文件系统的 /bin下
fi
if [ -e ${BIN_DIR}/tftp ] && [ "${BIN_DIR}/tftp" != "${OUT_DIR}/bin/tftp" ]; then
cp -f ${BIN_DIR}/tftp ${OUT_DIR}/bin/tftp
cp -f ${BIN_DIR}/tftp ${OUT_DIR}/bin/tftp #拷贝 tftp 到根文件系统的 /bin下
fi
fi
cp -f ${LIB_DIR}/* ${ROOTFS_DIR}/lib
cp -f ${LIB_DIR}/* ${ROOTFS_DIR}/lib #将c/c++ .so 库拷贝到根文件系统的 /lib
cp -f ${LIB_DIR}/* ${OUT_DIR}/libs
......@@ -34,8 +34,8 @@ system=$(uname -s)
ROOTFS_DIR=$1
FSTYPE=$2
ROOTFS_IMG=${ROOTFS_DIR}"_"${FSTYPE}".img"
JFFS2_TOOL=mkfs.jffs2
WIN_JFFS2_TOOL=mkfs.jffs2.exe
JFFS2_TOOL=mkfs.jffs2 #linux 下 制作 jffs2镜像文件的工具
WIN_JFFS2_TOOL=mkfs.jffs2.exe #windows 下 制作 jffs2镜像文件的工具
YAFFS2_TOOL=mkyaffs2image100
VFAT_TOOL=mkfs.vfat
ROMFS_TOOL=genromfs
......@@ -50,19 +50,19 @@ fi
return 0
}
chmod -R 755 ${ROOTFS_DIR}
chmod -R 755 ${ROOTFS_DIR}
if [ -f "${ROOTFS_DIR}/bin/init" ]; then
chmod 700 ${ROOTFS_DIR}/bin/init 2> /dev/null
chmod 700 ${ROOTFS_DIR}/bin/init 2> /dev/null #标准错误输出重定向到空设备文件
fi
if [ -f "${ROOTFS_DIR}/bin/shell" ]; then
chmod 700 ${ROOTFS_DIR}/bin/shell 2> /dev/null
fi
# http://manpages.ubuntu.com/manpages/trusty/man1/mkfs.jffs2.1.html
if [ "${FSTYPE}" = "jffs2" ]; then
if [ "${system}" != "Linux" ] ; then
tool_check ${WIN_JFFS2_TOOL}
${WIN_JFFS2_TOOL} -q -o ${ROOTFS_IMG} -d ${ROOTFS_DIR} --pagesize=4096
else
else #Linux + jffs2 执行这里
tool_check ${JFFS2_TOOL}
${JFFS2_TOOL} -q -o ${ROOTFS_IMG} -d ${ROOTFS_DIR} --pagesize=4096
fi
......
......@@ -13,6 +13,6 @@
###
cd ../../../../
mkdir build
git clone git@gitee.com:weharmony/build_lite.git build/lite
git clone git@gitee.com:weharmony/build_lite_note.git build/lite
cd -
### 注解 third_party_NuttX 源码
cd ../../../../build/lite
#git fetch
git pull origin master
git pull git@gitee.com:weharmony/build_lite_note.git master
#git pull --rebase origin master
......
......@@ -2,14 +2,14 @@
cd ../../../../build/lite
git add -A
git commit -m ' 挖透鸿蒙编译过程
git commit -m ' 注解鸿蒙编译构建子系统
百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码
博客输出站点(国内):http://weharmonyos.com
博客输出站点(国外):https://weharmony.github.io
注解文件系统:https://gitee.com/weharmony/third_party_NuttX
注解协议栈:https://gitee.com/weharmony/third_party_lwip
注解编译子系统:https://gitee.com/weharmony/build_lite
注解文件系统:https://gitee.com/weharmony/third_party_NuttX_note
注解协议栈:https://gitee.com/weharmony/third_party_lwip_note
注解编译子系统:https://gitee.com/weharmony/build_lite_note
'
git push git@gitee.com:weharmony/build_lite.git master
git push git@gitee.com:weharmony/build_lite_note.git master
cd -
\ No newline at end of file
git add -A
git commit -m ' 增加编译构建博客
git commit -m ' 注解根文件系统制作过程
百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码
博客输出站点(国内):http://weharmonyos.com
博客输出站点(国外):https://weharmony.github.io
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册