基于imx6ul平台移植ohos3.0.3LTS小型系统之添加产品编译框架
首先添加vendor下的目錄,我這里創建如下形式的目錄vendor/xingyun/imx6ul_nand_linux,目錄創建完成后就是填充這個目錄了,首先添加BUILD.gn文件,其中文件內容如下,請注意,這個雙引號里面的內容最好和目錄相匹配。
group("imx6ul_nand_linux") { }添加完成BUILD.gn后再接著添加config.json文件,文件內容如下,
{"product_name": "imx6ul_nand_openharmony", //這里是對應hb set時顯示的內容"ohos_version": "OpenHarmony 3.0", //這里使用的版本"device_company": "xingyun", //這里對應源碼根目錄下device下的子目錄"board": "imx6ul_nand_linux", //這里對應/device/xingyun/下的子目錄名"kernel_type": "linux",//內核類型"kernel_version": "5.4", //內核版本"subsystems": [] }添加完成之后,我們對應的在device下創建好如下兩級子目錄xingyun/imx6ul_nand_linux,完整目錄為device/xingyun/imx6ul_nand_linux,創建完成后,我們使用hb set查看效果。hb set效果如下圖
可以看到我們添加的產品已經可以選擇了。選中之后回車,報如下錯誤信息。
這是因為我們沒有在device下添加我們的配置信息。這里我們直接是復制其他產品的配置文件cp hisilicon/hispark_taurus/sdk_linux/config.gni xingyun/imx6ul_nand_linux/sdk_linux/,修改如下圖對應的linux內核版本。
再次執行hb set然后回車效果如下圖所示。
報錯信息如下所示
這里是因為我們沒有在vendor/xingyun/imx6ul_nand_linux/config.json中添加如下兩句話,添加完之后記得創建vendor/xingyun/imx6ul_nand_linux/hals目錄
diff --git a/vendor/xingyun/imx6ul_nand_linux/config.json b/vendor/xingyun/imx6ul_nand_linux/config.json index fb5c3344e0..387f94f04d 100644 --- a/vendor/xingyun/imx6ul_nand_linux/config.json +++ b/vendor/xingyun/imx6ul_nand_linux/config.json @@ -6,5 +6,8 @@"kernel_type": "linux","kernel_version": "5.4","subsystems": [ - ] + ], + "third_party_dir": "//third_party", + "product_adapter_dir": "//vendor/xingyun/imx6ul_nand_linux/hals" +}接著執行hb build,出現如下錯誤
[OHOS INFO] ERROR at //build/lite/BUILD.gn:101:17: Unable to load "/home/zxy/openharmony/imx6ul/device/xingyun/imx6ul_nand_linux/BUILD.gn". [OHOS INFO] deps += [ "${device_path}/../" ] [OHOS INFO] ^------------------- [OHOS INFO] ohos_build_compiler: clang [OHOS ERROR] you can check build log in /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/build.log [OHOS ERROR] command: "/home/zxy/openharmony/imx6ul/prebuilts/build-tools/linux-x86/bin/gn gen /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony --root=/home/zxy/openharmony/imx6ul --dotfile=/home/zxy/openharmony/imx6ul/build/lite/.gn --script-executable=/usr/bin/python3 --args=ohos_build_compiler_specified="clang" ohos_build_compiler_dir="//prebuilts/clang/ohos/linux-x86_64/llvm" product_path="/home/zxy/openharmony/imx6ul/vendor/xingyun/imx6ul_nand_linux" device_path="/home/zxy/openharmony/imx6ul/device/xingyun/imx6ul_nand_linux/sdk_linux" ohos_kernel_type="linux" ohos_build_type="debug" ohos_build_time="1654928846765" ohos_build_datetime="2022-06-11 22:27:26" ohos_full_compile=true" failed [OHOS ERROR] return code: 1 [OHOS ERROR] execution path: /home/zxy/openharmony/imx6ul我們沒有在device/xingyun/imx6ul_nand_linux目錄下添加BUILD.gn文件,那么我們添加它,添加device/xingyun/imx6ul_nand_linux/BUILD.gn文件,文件內容為
group("imx6ul_nand_linux") { }接著hb build,依然報錯
[OHOS INFO] ohos_build_compiler: clang [OHOS INFO] //prebuilts/lite/sysroot/build:build_sysroot is marked as prebuilts [OHOS INFO] //kernel/linux/build:linux_kernel is marked as prebuilts [OHOS INFO] Done. Made 12 targets from 16 files in 8ms [OHOS INFO] [1/17] STAMP obj/build/lite/mark_as_prebuilts.stamp [OHOS INFO] [2/17] STAMP obj/build/lite/ndk.stamp [OHOS INFO] [3/17] STAMP obj/device/xingyun/imx6ul_nand_linux/imx6ul_nand_linux.stamp [OHOS INFO] [4/17] STAMP obj/vendor/xingyun/imx6ul_nand_linux/imx6ul_nand_linux.stamp [OHOS INFO] [5/17] STAMP obj/build/lite/ohos.stamp [OHOS INFO] [6/17] STAMP obj/build/lite/product.stamp [OHOS INFO] [7/17] ACTION //kernel/linux/build:linux_kernel(//build/lite/toolchain:linux_x86_64_ohos_clang) [OHOS ERROR] [7/17] ACTION //kernel/linux/build:linux_kernel(//build/lite/toolchain:linux_x86_64_ohos_clang) [OHOS ERROR] FAILED: obj/kernel/linux/build/linux_kernel_build_ext_components.txt [OHOS ERROR] /usr/bin/python3 ../../../build/lite/build_ext_components.py --path=../../../kernel/linux/build --command=./kernel_module_build.sh\ /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony\ small\ /home/zxy/openharmony/imx6ul/prebuilts/clang/ohos/linux-x86_64/llvm\ vendor/xingyun/imx6ul_nand_linux\ imx6ul_nand_linux\ linux-5.10 --target_dir=/home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/obj/kernel/linux/build/build.log --out_dir=/home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/error.log [OHOS ERROR] echo "build kernel..." [OHOS ERROR] build kernel... [OHOS ERROR] rm -rf /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.10;mkdir -p /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.10;cp -arfL /home/zxy/openharmony/imx6ul/kernel/linux/linux-5.10/* /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.10/ [OHOS ERROR] cd /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.10 && patch -p1 < /home/zxy/openharmony/imx6ul/kernel/linux/patches/linux-5.10/_patch/hdf.patch && patch -p1 < /home/zxy/openharmony/imx6ul/kernel/linux/patches/linux-5.10/_patch/.patch [OHOS ERROR] /bin/sh: /home/zxy/openharmony/imx6ul/kernel/linux/patches/linux-5.10/_patch/hdf.patch: No such file or directory [OHOS ERROR] make: *** [kernel.mk:75: /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.10/arch/arm/boot/uImage] Error 1 [OHOS ERROR] you can check build log in /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/build.log [OHOS ERROR] command: "/home/zxy/openharmony/imx6ul/prebuilts/build-tools/linux-x86/bin/ninja -w dupbuild=warn -C /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony" failed [OHOS ERROR] return code: 1 [OHOS ERROR] execution path: /home/zxy/openharmony/imx6ul通過對上面的報錯信息分析,發現編譯的內核好像并沒有使用我們的內核版本去進行編譯,這里是因為build/ohos/kernel/kernel.gni這里影響了,那么我們怎么解決這個問題呢,我們可以使用如下添加打印信息,print(“$board_name”),修改補丁如下
diff --git a/kernel/linux/build/BUILD.gn b/kernel/linux/build/BUILD.gn index 5e2e10fa92..6ba5e1bb51 100644 --- a/kernel/linux/build/BUILD.gn +++ b/kernel/linux/build/BUILD.gn @@ -29,7 +29,11 @@ if (defined(ohos_lite)) {}build_type = "small"product_path_rebase = rebase_path(product_path, ohos_root_path) - command = "./kernel_module_build.sh ${outdir} ${build_type} ${clang_dir} ${product_path_rebase} ${board_name} ${linux_kernel_version}" + if ( board_name == "imx6ul_nand_linux") { + command = "./kernel_module_build.sh ${outdir} ${build_type} ${clang_dir} ${product_path_rebase} ${board_name} linux-${kernel_version}" + } else { + command = "./kernel_module_build.sh ${outdir} ${build_type} ${clang_dir} ${product_path_rebase} ${board_name} ${linux_kernel_version}" + }deps = [ "//build/lite:mark_as_prebuilts" ]}} else {這里我是通過判斷我們的baord_name字段來區分,這里特別需要注意的是if和else括號里面的內容不能用tab來縮進,不然會報如下錯誤信息,一定是需要使用空格
[OHOS INFO] ohos_build_compiler: clang [OHOS INFO] //prebuilts/lite/sysroot/build:build_sysroot is marked as prebuilts [OHOS INFO] ERROR at //kernel/linux/build/BUILD.gn:35:1: Invalid token. [OHOS INFO] command = "./kernel_module_build.sh ${outdir} ${build_type} ${clang_dir} ${product_path_rebase} ${board_name} ${linux_kernel_version}" [OHOS INFO] ^ [OHOS INFO] You got a tab character in here. Tabs are evil. Convert to spaces. [OHOS ERROR] you can check build log in /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/build.log [OHOS ERROR] command: "/home/zxy/openharmony/imx6ul/prebuilts/build-tools/linux-x86/bin/gn gen /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony --root=/home/zxy/openharmony/imx6ul --dotfile=/home/zxy/openharmony/imx6ul/build/lite/.gn --script-executable=/usr/bin/python3 --args=ohos_build_compiler_specified="clang" ohos_build_compiler_dir="//prebuilts/clang/ohos/linux-x86_64/llvm" product_path="/home/zxy/openharmony/imx6ul/vendor/xingyun/imx6ul_nand_linux" device_path="/home/zxy/openharmony/imx6ul/device/xingyun/imx6ul_nand_linux/sdk_linux" ohos_kernel_type="linux" ohos_build_type="debug" ohos_build_time="1654930991854" ohos_build_datetime="2022-06-11 23:03:11" ohos_full_compile=true" failed [OHOS ERROR] return code: 1這樣就會去編譯我們指定的內核版本了,然后修改如下地方
diff --git a/kernel/linux/build/kernel_module_build.sh b/kernel/linux/build/kernel_module_build.sh index 826bd6c3e6..5599923370 100755 --- a/kernel/linux/build/kernel_module_build.sh +++ b/kernel/linux/build/kernel_module_build.sh @@ -30,6 +30,8 @@ if [ "$2" == "small" ];thenfiif [ "$5" == "hispark_taurus" ];thenexport DEVICE_NAME=hi3516dv300 + elif [ "$5" == "imx6ul_nand_linux" ];then + export DEVICE_NAME=imx6ul_nand_linuxfielif [ "$2" == "standard" ];thenexport BUILD_TYPE=standard編譯報錯如下,我們沒有添加patch文件導致如下錯誤。
[OHOS ERROR] rm -rf /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.4;mkdir -p /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.4;cp -arfL /home/zxy/openharmony/imx6ul/kernel/linux/linux-5.4/* /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.4/ [OHOS ERROR] cd /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.4 && patch -p1 < /home/zxy/openharmony/imx6ul/kernel/linux/patches/linux-5.4/imx6ul_nand_linux_patch/hdf.patch && patch -p1 < /home/zxy/openharmony/imx6ul/kernel/linux/patches/linux-5.4/imx6ul_nand_linux_patch/imx6ul_nand_linux.patch [OHOS ERROR] /bin/sh: /home/zxy/openharmony/imx6ul/kernel/linux/patches/linux-5.4/imx6ul_nand_linux_patch/hdf.patch: No such file or directory [OHOS ERROR] make: *** [kernel.mk:75: /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.4/arch/arm/boot/uImage] Error 1 [OHOS ERROR] you can check build log in /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/build.log [OHOS ERROR] command: "/home/zxy/openharmony/imx6ul/prebuilts/build-tools/linux-x86/bin/ninja -w dupbuild=warn -C /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony" failed [OHOS ERROR] return code: 1 [OHOS ERROR] execution path: /home/zxy/openharmony/imx6ul首先創建kernel/linux/patches/linux-5.4/imx6ul_nand_linux_patch目錄,然后添加hdf.patch ,imx6ul_nand_linux.patch , imx6ul_nand_linux_small.patch三個patch文件,這里確定使用如下目錄可以根據如下編譯報錯信息提示得知,
[OHOS ERROR] rm -rf /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.4;mkdir -p /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.4;cp -arfL /home/zxy/openharmony/imx6ul/kernel/linux/linux-5.4/* /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.4/ [OHOS ERROR] cd /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.4 && patch -p1 < /home/zxy/openharmony/imx6ul/kernel/linux/patches/linux-5.4/imx6ul_nand_linux_patch/hdf.patch && patch -p1 < /home/zxy/openharmony/imx6ul/kernel/linux/patches/linux-5.4/imx6ul_nand_linux_patch/imx6ul_nand_linux.patch [OHOS ERROR] cd /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.4 && patch -p1 < /home/zxy/openharmony/imx6ul/kernel/linux/patches/linux-5.4/imx6ul_nand_linux_patch/imx6ul_nand_linux_small.patch [OHOS ERROR] /bin/sh: /home/zxy/openharmony/imx6ul/kernel/linux/patches/linux-5.4/imx6ul_nand_linux_patch/imx6ul_nand_linux_small.patch: No such file or directory [OHOS ERROR] make: *** [kernel.mk:76: /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.4/arch/arm/boot/uImage] Error 1 [OHOS ERROR] you can check build log in /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/build.log [OHOS ERROR] command: "/home/zxy/openharmony/imx6ul/prebuilts/build-tools/linux-x86/bin/ninja -w dupbuild=warn -C /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony" failed [OHOS ERROR] return code: 1 [OHOS ERROR] execution path: /home/zxy/openharmony/imx6ul或者根據kernel/linux/build/kernel.mk中如下描述也可得知
DEVICE_PATCH_DIR := $(OHOS_BUILD_HOME)/kernel/linux/patches/${KERNEL_VERSION}/$(DEVICE_NAME)_patch DEVICE_PATCH_FILE := $(DEVICE_PATCH_DIR)/$(DEVICE_NAME).patch HDF_PATCH_FILE := $(DEVICE_PATCH_DIR)/hdf.patch SMALL_PATCH_FILE := $(DEVICE_PATCH_DIR)/$(DEVICE_NAME)_$(BUILD_TYPE).patch KERNEL_IMAGE_FILE := $(KERNEL_SRC_TMP_PATH)/arch/arm/boot/uImage DEFCONFIG_FILE := $(DEVICE_NAME)_$(BUILD_TYPE)_defconfig export HDF_PROJECT_ROOT=$(OHOS_BUILD_HOME)/添加好了patch文件后,再添加配置文件,首先創建kernel/linux/config/linux-5.4/arch/arm/configs目錄,然后再此目錄下添加imx6ul_nand_linux_small_defconfig,這里使用我們編譯linux內核使用的配置文件即可。
[OHOS ERROR] *** Can't find default configuration "arch/arm/configs/imx6ul_nand_linux_small_defconfig"! [OHOS ERROR] *** [OHOS ERROR] make[2]: *** [scripts/kconfig/Makefile:90: imx6ul_nand_linux_small_defconfig] Error 1 [OHOS ERROR] make[1]: *** [Makefile:590: imx6ul_nand_linux_small_defconfig] Error 2 [OHOS ERROR] make[1]: Leaving directory '/home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.4' [OHOS ERROR] make: *** [kernel.mk:79: /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/kernel/linux-5.4/arch/arm/boot/uImage] Error 2 [OHOS ERROR] you can check build log in /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony/build.log [OHOS ERROR] command: "/home/zxy/openharmony/imx6ul/prebuilts/build-tools/linux-x86/bin/ninja -w dupbuild=warn -C /home/zxy/openharmony/imx6ul/out/imx6ul_nand_linux/imx6ul_nand_openharmony" failed [OHOS ERROR] return code: 1 [OHOS ERROR] execution path: /home/zxy/openharmony/imx6ul然后對于我這里,因為我是編譯zImage,所以我需要修改如下兩個地方
diff --git a/kernel/linux/build/kernel.mk b/kernel/linux/build/kernel.mk index 56fcde79ef..1688c985e5 100644 --- a/kernel/linux/build/kernel.mk +++ b/kernel/linux/build/kernel.mk @@ -82,7 +82,11 @@ endififeq ($(KERNEL_VERSION), linux-5.10)$(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) modules_prepareendif +ifeq ($(DEVICE_NAME),imx6ul_nand_linux) + $(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) -j64 +else$(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) -j64 uImageendif +endif.PHONY: build-kernelbuild-kernel: $(KERNEL_IMAGE_FILE) diff --git a/kernel/linux/build/kernel_module_build.sh b/kernel/linux/build/kernel_module_build.sh index 5599923370..05c5ed775e 100755 --- a/kernel/linux/build/kernel_module_build.sh +++ b/kernel/linux/build/kernel_module_build.sh @@ -43,7 +43,11 @@ fiexport OHOS_ROOT_PATH=$(pwd)/../../..export PRODUCT_PATH=$4-LINUX_KERNEL_UIMAGE_FILE=${LINUX_KERNEL_OUT}/arch/arm/boot/uImage +if [ "$5" == "hispark_taurus" ];then + LINUX_KERNEL_UIMAGE_FILE=${LINUX_KERNEL_OUT}/arch/arm/boot/uImage +elif [ "$5" == "imx6ul_nand_linux" ];then + LINUX_KERNEL_UIMAGE_FILE=${LINUX_KERNEL_OUT}/arch/arm/boot/zImage +fimake -f kernel.mk編譯成功如下所示
[OHOS INFO] [1/11] ACTION //kernel/linux/build:linux_kernel(//build/lite/toolchain:linux_x86_64_ohos_clang) [OHOS INFO] [2/11] STAMP obj/kernel/linux/build/linux_kernel.stamp [OHOS INFO] [3/11] ACTION //prebuilts/lite/sysroot/build:build_sysroot(//build/lite/toolchain:linux_x86_64_ohos_clang) [OHOS INFO] [4/11] STAMP obj/prebuilts/lite/sysroot/build/build_sysroot.stamp [OHOS INFO] [5/11] STAMP obj/prebuilts/lite/sysroot/build/build.stamp [OHOS INFO] [6/11] STAMP obj/prebuilts/lite/sysroot/sysroot.stamp [OHOS INFO] [7/11] STAMP obj/build/lite/prebuilts.stamp [OHOS INFO] [8/11] STAMP obj/prebuilts/lite/sysroot/build/strip.inputdeps.stamp [OHOS INFO] [9/11] ACTION //prebuilts/lite/sysroot/build:strip(//build/lite/toolchain:linux_x86_64_ohos_clang) [OHOS INFO] [10/11] ACTION //prebuilts/lite/sysroot/build:strip(//build/lite/toolchain:linux_x86_64_ohos_clang) [OHOS INFO] [11/11] STAMP obj/prebuilts/lite/sysroot/build/strip.stamp [OHOS INFO] /home/zxy/openharmony/imx6ul/vendor/xingyun/imx6ul_nand_linux/fs.yml not found, stop packing fs. If the product does not need to be packaged, ignore it. [OHOS INFO] imx6ul_nand_openharmony build success [OHOS INFO] cost time: 0:08:48內核成功運行截圖如下
然后添加我們的啟動恢復子系統,這樣就能產生init可執行文件,只需要添加如下信息文件即可
添加完成后如下圖,多了恢復啟動子系統
然后開始添加我們的根文件系統,首先復制其他產品的根文件系統,主要是依靠fs.yml產生
cp vendor/hisilicon/hispark_taurus_linux/fs.yml vendor/xingyun/imx6ul_nand_linux/,復制完成后,需要修改,因為我們是256MB的NAND需要裁剪。
添加完成后還需要添加init.cfg文件,init進程會通過init.cfg啟動其他服務首先在vendor/xingyun/imx6ul_nand_linux下創建目錄init_configs,然后新建文件init_configs.cfg,把其他產品上的復制一份即可,接著添加BUILD.gn和etc目錄,其中etc目錄下添加的文件為
進入init.d目錄,創建如下文件。
然后再來修改這些文件,首先需要修改vendor/xingyun/imx6ul_nand_linux/init_configs/下的BUILD.gn文件,需要把我們的文件都添加到根文件系統里面去。
這里是直接進行的復制操作,然后修改vendor/xingyun/imx6ul_nand_linux/下的BUILD.gn
group("imx6ul_nand_linux") {deps = ["init_configs","init_configs:init_initd","init_configs:init_fstab"] }接著復制當前文件內容到hals下
cp vendor/hisilicon/hispark_taurus_linux/hals/* vendor/xingyun/imx6ul_nand_linux/hals/ -r,注意修改如下地方
編譯完成后,我們手動執行如下命令tar -jcvf rootfs.tar.bz2 -C ./rootfs .打包我們的根文件系統即可,然后通過mfgtools下載。
可以看到成功掛載上了根文件系統。這里因為需要自己手動去打包根文件系統,比較麻煩,那么現在我們直接添加到編譯腳本中去,首先修改如下圖,使用我們自己的腳本文件
接著修改device/xingyun/imx6ul_nand_linux/tools/rootfsimg_linux.sh腳本文件,這個文件可以從其他產品或者build下拷貝過來使用,我這邊添加成如下即可。
然后打開binder驅動,
重新編譯后,就可以得到我們的所有文件了。然后再把編譯好的u-boot文件復制到我們的目錄下
首先創建vendor/xingyun/imx6ul_nand_linux/u-boot目錄,然后把uboot二進制文件放到此處即可。接著添加BUILD.gn文件,具體文件內容如下
然后修改上級BUILD.gn,將u-boot加入進去即可。
group("imx6ul_nand_linux") {deps = ["init_configs","init_configs:init_initd","init_configs:init_fstab","u-boot"] }這樣編譯后,我們就能得到u-boot,zImage ,dtb,rootfs所有的文件了。接著添加內核HDF框架支持,之前有人問到過怎么提取自己版本的hdf文件,我這里就詳細介紹下,我這邊是如何得到的,首先將你的源碼存放在其他目錄下,比如我這里就是將linux原生的sdk源碼,單獨存放在一個目錄。
然后使用git init,git commit將源碼生成commit,然后我們在這里對應修改,生成patch即可。然后需要添加hcs文件,首先創建如下目錄vendor/xingyun/imx6ul_nand_linux/hdf_config,然后復制其他產品此目錄中的Makefile文件,然后新建hdf.hcs文件,文件就添加如下內容就好。
然后編譯,主要解決以下錯誤。首先就是usb的問題,這里是判斷內核是哪個
diff --git a/drivers/adapter/khdf/linux/model/usb/device/f_generic.c b/drivers/adapter/khdf/linux/model/usb/device/f_generic.c index 6878c95797..e5965d4551 100644 --- a/drivers/adapter/khdf/linux/model/usb/device/f_generic.c +++ b/drivers/adapter/khdf/linux/model/usb/device/f_generic.c @@ -1604,7 +1604,7 @@ static void ffs_data_put(struct ffs_data *ffs)pr_info("%s(): freeing\n", __func__);ffs_data_clear(ffs);BUG_ON(waitqueue_active(&ffs->ev.waitq) || -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,5,0)swait_active(&ffs->ep0req_completion.wait) ||#elsewaitqueue_active(&ffs->ep0req_completion.wait) ||然后有些配置是默認就打開的,我們這里全部修改為默認關閉。
diff --git a/drivers/adapter/khdf/linux/Kconfig b/drivers/adapter/khdf/linux/Kconfig index 037b190fb2..a3b15659b4 100644 --- a/drivers/adapter/khdf/linux/Kconfig +++ b/drivers/adapter/khdf/linux/Kconfig @@ -1,7 +1,7 @@config DRIVERS_HDFbool "Enable HDF manager" - default y + default nhelpAnswer Y to enable Linux support HDF.@@ -25,4 +25,4 @@ source "drivers/hdf/khdf/model/usb/host/Kconfig"source "drivers/hdf/khdf/model/usb/device/Kconfig"source "drivers/hdf/khdf/model/audio/Kconfig"source "drivers/hdf/khdf/model/misc/vibrator/Kconfig" -source "drivers/hdf/khdf/model/misc/dsoftbus/Kconfig" \ No newline at end of file +source "drivers/hdf/khdf/model/misc/dsoftbus/Kconfig" diff --git a/drivers/adapter/khdf/linux/model/audio/Kconfig b/drivers/adapter/khdf/linux/model/audio/Kconfig index a760df7f5d..e64039795e 100755 --- a/drivers/adapter/khdf/linux/model/audio/Kconfig +++ b/drivers/adapter/khdf/linux/model/audio/Kconfig @@ -1,6 +1,6 @@config DRIVERS_HDF_AUDIObool "Enable HDF Audio driver" - default y + default ndepends on DRIVERS_HDFhelpAnswer Y to choice HDF Audio input driver. diff --git a/drivers/adapter/khdf/linux/model/usb/device/Kconfig b/drivers/adapter/khdf/linux/model/usb/device/Kconfig index 54d4cc7962..eb473b36f6 100644 --- a/drivers/adapter/khdf/linux/model/usb/device/Kconfig +++ b/drivers/adapter/khdf/linux/model/usb/device/Kconfig @@ -1,6 +1,6 @@config DRIVERS_HDF_USB_F_GENERICbool "Enable F_GENERIC driver" - default y + default ndepends on DRIVERS_HDFhelpAnswer Y to choice HDF USB F_GENERIC driver. diff --git a/drivers/adapter/khdf/linux/model/usb/host/Kconfig b/drivers/adapter/khdf/linux/model/usb/host/Kconfig index 97f59cb6a0..710f80dba6 100644 --- a/drivers/adapter/khdf/linux/model/usb/host/Kconfig +++ b/drivers/adapter/khdf/linux/model/usb/host/Kconfig @@ -11,7 +11,7 @@config DRIVERS_HDF_USB_PNP_NOTIFYbool "Enable HDF USB PNP Notify driver" - default y + default ndepends on DRIVERS_HDFhelpAnswer Y to choice HDF USB PNP Notify driver.到此,添加框架基本計算完成了。如果啟動出現如下情況,是因為沒有把binder驅動補丁添加造成的
在kernel/linux/patches/linux-5.4/imx6ul_nand_linux_patch/imx6ul_nand_linux_small.patch中添加如下補丁內容即可解決。
成功運行截圖
啟動的時候發現hilog并未成功注冊
修改補丁如下
diff --git a/kernel/linux/linux-5.4/drivers/staging/hilog/hilog.c b/kernel/linux/linux-5.4/drivers/staging/hilog/hilog.c index dae5ab074c..46700b146a 100644 --- a/kernel/linux/linux-5.4/drivers/staging/hilog/hilog.c +++ b/kernel/linux/linux-5.4/drivers/staging/hilog/hilog.c @@ -337,12 +337,14 @@ static void hilog_device_init(void)hilog_dev.count = 0;}+static dev_t dev_t_no; +static int __init hilogdev_init(void){int result; - dev_t devno = MKDEV(hilog_major, 0); - - result = register_chrdev_region(devno, 2, "hilog"); + //dev_t devno = MKDEV(hilog_major, 0); + alloc_chrdev_region(&dev_t_no,2,255,"hilog"); + //result = register_chrdev_region(devno, 2, "hilog");if (result < 0) {pr_emerg("\t register hilog error %d\n", result);return result; @@ -352,7 +354,7 @@ static int __init hilogdev_init(void)g_hilog_cdev.owner = THIS_MODULE;g_hilog_cdev.ops = &hilog_fops;- cdev_add(&g_hilog_cdev, MKDEV(hilog_major, 0), HILOG_NR_DEVS); + cdev_add(&g_hilog_cdev, dev_t_no/*MKDEV(hilog_major, 0)*/, HILOG_NR_DEVS);hilog_device_init();return 0;總結
以上是生活随笔為你收集整理的基于imx6ul平台移植ohos3.0.3LTS小型系统之添加产品编译框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初中学历可以自学matlab,过来人对初
- 下一篇: 定位助手_隐私条款