添加编译构建过程
首先在源码根目录vendor下添加 vendor/xingyun/t113_nand此目录,可参考hisilicon/hispark_taurus_linux/实现,创建好自己产品目录之后开始添加文件,首先需要创建的文件为编译文件,BUILD.gn,添加配置文件config.json,添加hals目录,目录暂时可以为空。其中BUILD.gn中的内容可以暂时先只有如下语句即可,注意,双引号内容最好与当前目录名称相同 group(“t113_nand”) { } 然后打开config.json文件,添加相应的字段描述。如下为我添加构建初期的文件内容 { “product_name”: “xingyun_t113_nand_board”, “ohos_version”: “OpenHarmony 3.0”, “device_company”: “xingyunelec”, //对应源码目录下/device/目录下的文件夹 xingyunelec “board”: “t113_nand_linux”, //对应device/xingyunelec/目录下的文件夹t113_nand_linux “kernel_type”: “linux”, “kernel_version”: “5.4”, “subsystems”: [ ], “third_party_dir”: “//third_party”, “product_adapter_dir”: “//vendor/xingyun/t113_nand/hals” } 所以你需要在device目录下创建该有的文件夹,示例我这里需要的目录则为device/xingyunelec/t113_nand_linux,创建完成目录后我们可以进行hb set操作了,可以看到出现我们的选择项了,选择我们自己的产品,然后回车 回车之后出现如下图错误信息,因为我们没有配置产品的相关信息,现在我们开始配置产品信息
首先同样需要一个编译文件BUILD.gn,里面内容同上文大同小异,内容为如下。 group(“t113_nand_linux”) { } 然后创建文件夹sdk_linux,改名字可以随意起,然后在device/xingyunelec/t113_nand_linux/sdk_linux目录里面创建文件config.gni。打开文件,其中内容做个介绍
kernel_type = “linux” //使用的内核,一般有"linux", “liteos_a”, “liteos_m”. kernel_version = “5.4” //使用的内核版本 board_cpu = “cortex-a7” //使用的芯片架构, “cortex-a7”, “riscv32” board_arch = “” //使用的芯片架构 “armv7-a”, “rv32imac” board_toolchain = “” //使用的工具链gcc-arm-none-eabi, arm-linux-harmonyeabi-gcc, ohos-clang board_toolchain_path = “” //使用的工具链路径,直接把交叉编译器的全路径放进来即可 board_toolchain_prefix = “” //gcc-arm-none- board_toolchain_type = “clang” //“gcc” or “clang” board_cflags = [ //编译c的选项 “-mfloat-abi=softfp”, “-mfpu=neon-vfpv4”, ] board_cxx_flags = [ “-mfloat-abi=softfp”, “-mfpu=neon-vfpv4”, ] board_ld_flags = [] //链接库选项
board_include_dirs = [] //包含的第三方源码头文件
board_adapter_dir = “”
board_configed_sysroot = “”
storage_type = “” 填写以上内容即可。 然后我们再去执行hb set,选择我们添加的产品执行结果如下图,不会报错了。 接着我们尝试开始进行编译,直接运行hb build。 然后发现报错了,而且编译的还是5.10的内核,这是怎么回事,其实是会去build/ohos/kernel/kernel.gni读取这里面的值去默认编译内核版本,为什么会这样,目前还不知道,知道的可以告知下。那我们先添加内核组件尝试下,可能不能去编译我们选定的内核版本,修改 vendor/xingyun/t113_nand/config.json文件,在组件里面添加内核编译组件,添加的内容如下 { “subsystem”: “kernel”, “components”: [ { “component”: “linux_5_4”, “features”:[] } ] } 添加后完整的文件内容如下图所示 添加完成后开始编译,执行hb build -f,很好,又报错了,报错内容如下,很明显,找不到组件编译规则 [OHOS INFO] ERROR at //build/lite/BUILD.gn:60:9: Assertion failed. [OHOS INFO] assert( [OHOS INFO] ^----- [OHOS INFO] Component “linux_5_4” not found, please check your product configuration. [OHOS INFO] See //build/lite/BUILD.gn:61:13: [OHOS INFO] component_found, [OHOS INFO] ^-------------- [OHOS INFO] This is where it was set. [OHOS INFO] ohos_build_compiler: clang [OHOS ERROR] you can check build log in /home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/build.log [OHOS ERROR] command: “/home/d1/openHarmony/t113/prebuilts/build-tools/linux-x86/bin/gn gen /home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board --root=/home/d1/openHarmony/t113 --dotfile=/home/d1/openHarmony/t113/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/d1/openHarmony/t113/vendor/xingyun/t113_nand" device_path="/home/d1/openHarmony/t113/device/xingyunelec/t113_nand_linux/sdk_linux" ohos_kernel_type=“linux” ohos_build_type=“debug” ohos_build_time=“1648698057822” ohos_build_datetime=“2022-03-31 19:40:57” ohos_full_compile=true" failed [OHOS ERROR] return code: 1 [OHOS ERROR] execution path: /home/d1/openHarmony/t113 所以需要我们去解决,通过对比,发现在hisilicon下面有使用其他版本的内核的组件,最后定位到的文件为 build/lite/components/kernel.json,尝试在此处添加我们自定义内核的编译规则。添加如下内容即可。文件正确性有待验证,主要是"output": [ “uImage_hi3516dv300_smp” ],
{ “component”: “linux_5_4”, “description”: “linux 5.4”, “optional”: “false”, “dirs”: [ “kernel/linux/build” ], “targets”: [ “//kernel/linux/build:linux_kernel” ], “rom”: “”, “ram”: “”, “output”: [ “uImage_hi3516dv300_smp” ], “features”: [], “adapted_board”: [ “t113_nand_linux” ], “adapted_kernel”: [ “linux” ], “deps”: { “components”: [], “third_party”: [] } } 然后修改文件kernel/linux/build/BUILD.gn,将文中内容对比修改为如下内容 -command = “./kernel_module_build.sh ${outdir} ${build_type} ${clang_dir} ${product_path_rebase} ${board_name} ${linux_kernel_version}” +command = “./kernel_module_build.sh ${outdir} ${build_type} ${clang_dir} ${product_path_rebase}
b
o
a
r
d
n
a
m
e
l
i
n
u
x
?
{board_name} linux-
boardn?amelinux?{kernel_version}” 然后把对应的内核源文件放入到kernel/linux/目录下,如下图,增加linux-5.4目录,里面即为内核源码 然后开始执行编译hb build,发现报错,报错信息如下。 [OHOS ERROR] [6/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/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board\ small\ /home/d1/openHarmony/t113/prebuilts/clang/ohos/linux-x86_64/llvm\ vendor/xingyun/t113_nand\ t113_nand_linux\ linux-5.4 --target_dir=/home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/obj/kernel/linux/build/build.log --out_dir=/home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/error.log [OHOS ERROR] echo “build kernel…” [OHOS ERROR] build kernel… [OHOS ERROR] rm -rf /home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/kernel/linux-5.4;mkdir -p /home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/kernel/linux-5.4;cp -arfL /home/d1/openHarmony/t113/kernel/linux/linux-5.4/* /home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/kernel/linux-5.4/ [OHOS ERROR] cd /home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/kernel/linux-5.4 && patch -p1 < /home/d1/openHarmony/t113/kernel/linux/patches/linux-5.4/_patch/hdf.patch && patch -p1 < /home/d1/openHarmony/t113/kernel/linux/patches/linux-5.4/_patch/.patch [OHOS ERROR] /bin/sh: /home/d1/openHarmony/t113/kernel/linux/patches/linux-5.4/_patch/hdf.patch: No such file or directory [OHOS ERROR] kernel.mk:73: recipe for target ‘/home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/kernel/linux-5.4/arch/arm/boot/uImage’ failed [OHOS ERROR] make: *** [/home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/kernel/linux-5.4/arch/arm/boot/uImage] Error 1 [OHOS ERROR] you can check build log in /home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/build.log [OHOS ERROR] command: “/home/d1/openHarmony/t113/prebuilts/build-tools/linux-x86/bin/ninja -w dupbuild=warn -C /home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board” failed [OHOS ERROR] return code: 1 [OHOS ERROR] execution path: /home/d1/openHarmony/t113 可以看到报错信息中有如下这样一句话,提示没有patch文件 /bin/sh: /home/d1/openHarmony/t113/kernel/linux/patches/linux-5.4/_patch/hdf.patch: No such file or directory 增加patch文件,首先需要修改kernel/linux/build/kernel_module_build.sh文件,增加自己板卡对应的设备名,后面会根据这个名字自动寻找对应的patch文件,修改内容如下 diff --git a/kernel/linux/build/kernel_module_build.sh b/kernel/linux/build/kernel_module_build.sh index 826bd6c3e6…74f7f68340 100755 — a/kernel/linux/build/kernel_module_build.sh +++ b/kernel/linux/build/kernel_module_build.sh @@ -30,6 +30,8 @@ if [ “$2” == “small” ];then fi if [ “$5” == “hispark_taurus” ];then export DEVICE_NAME=hi3516dv300 +elif [ “$5” == “t113_nand_linux” ];then //对应device/xingyunelec/目录下的t113_nand_linux文件夹名称 +export DEVICE_NAME=t113_nand_linux fi elif [ “$2” == “standard” ];then export BUILD_TYPE=standard 然后在kernel/linux/patches目录下增加linux-5.4目录,在linux-5.4/目录下增加t113_nand_linux_patch目录,此目录是根据上一步添加的DEVICE_NAME + _patch构成,创建目录之后,在此目录中添加如下几个文件hdf.patch,t113_nand_linux.patch,t113_nand_linux_small.patch,当前文件里面还没有内容,只是为了让编译能够通过,至于为什么是这几个文件,可以从kernel.mk中如下语句看出为什么是这几个文件。 $(hide) cd $(KERNEL_SRC_TMP_PATH) && patch -p1 < $(HDF_PATCH_FILE) && patch -p1 <
(
D
E
V
I
C
E
P
A
T
C
H
F
I
L
E
)
或
者
还
可
以
从
如
下
编
译
报
错
信
息
得
知
/
b
i
n
/
s
h
:
/
h
o
m
e
/
d
1
/
o
p
e
n
H
a
r
m
o
n
y
/
t
113
/
k
e
r
n
e
l
/
l
i
n
u
x
/
p
a
t
c
h
e
s
/
l
i
n
u
x
?
5.4
/
t
11
3
n
a
n
d
l
i
n
u
x
p
a
t
c
h
/
t
11
3
n
a
n
d
l
i
n
u
x
s
m
a
l
l
.
p
a
t
c
h
:
N
o
s
u
c
h
f
i
l
e
o
r
d
i
r
e
c
t
o
r
y
[
O
H
O
S
E
R
R
O
R
]
k
e
r
n
e
l
.
m
k
:
74
:
r
e
c
i
p
e
f
o
r
t
a
r
g
e
t
′
/
h
o
m
e
/
d
1
/
o
p
e
n
H
a
r
m
o
n
y
/
t
113
/
o
u
t
/
t
11
3
n
a
n
d
l
i
n
u
x
/
x
i
n
g
y
u
n
t
11
3
n
a
n
d
b
o
a
r
d
/
k
e
r
n
e
l
/
l
i
n
u
x
?
5.4
/
a
r
c
h
/
a
r
m
/
b
o
o
t
/
u
I
m
a
g
e
′
f
a
i
l
e
d
[
O
H
O
S
E
R
R
O
R
]
m
a
k
e
:
?
?
?
[
/
h
o
m
e
/
d
1
/
o
p
e
n
H
a
r
m
o
n
y
/
t
113
/
o
u
t
/
t
11
3
n
a
n
d
l
i
n
u
x
/
x
i
n
g
y
u
n
t
11
3
n
a
n
d
b
o
a
r
d
/
k
e
r
n
e
l
/
l
i
n
u
x
?
5.4
/
a
r
c
h
/
a
r
m
/
b
o
o
t
/
u
I
m
a
g
e
]
E
r
r
o
r
1
添
加
完
成
后
,
开
始
执
行
h
b
b
u
i
l
d
编
译
过
程
,
提
示
如
下
信
息
,
没
有
配
置
文
件
。
c
p
:
c
a
n
n
o
t
s
t
a
t
′
/
h
o
m
e
/
d
1
/
o
p
e
n
H
a
r
m
o
n
y
/
t
113
/
k
e
r
n
e
l
/
l
i
n
u
x
/
c
o
n
f
i
g
/
l
i
n
u
x
?
5.4
/
.
′
:
N
o
s
u
c
h
f
i
l
e
o
r
d
i
r
e
c
t
o
r
y
在
k
e
r
n
e
l
/
l
i
n
u
x
/
c
o
n
f
i
g
/
目
录
下
,
随
便
拷
贝
一
个
其
他
版
本
的
l
i
n
u
x
内
核
,
c
p
l
i
n
u
x
?
5.10
l
i
n
u
x
?
5.4
?
r
,
然
后
进
入
k
e
r
n
e
l
/
l
i
n
u
x
/
c
o
n
f
i
g
/
l
i
n
u
x
?
5.4
/
a
r
c
h
/
a
r
m
/
c
o
n
f
i
g
s
,
先
删
除
不
需
要
的
文
件
。
然
后
去
执
行
一
下
编
译
看
结
果
。
很
显
然
编
译
还
是
报
错
,
提
示
信
息
如
下
,
很
显
然
,
没
有
对
应
的
配
置
文
件
。
C
a
n
′
t
f
i
n
d
d
e
f
a
u
l
t
c
o
n
f
i
g
u
r
a
t
i
o
n
"
a
r
c
h
/
a
r
m
/
c
o
n
f
i
g
s
/
t
11
3
n
a
n
d
l
i
n
u
x
s
m
a
l
l
d
e
f
c
o
n
f
i
g
"
!
那
我
们
就
添
加
需
要
的
配
置
文
件
,
这
里
我
们
用
我
们
之
前
内
核
编
译
时
用
的
配
置
文
件
即
可
,
进
入
到
k
e
r
n
e
l
/
l
i
n
u
x
/
l
i
n
u
x
?
5.4
/
a
r
c
h
/
a
r
m
/
c
o
n
f
i
g
s
目
录
,
执
行
如
下
命
令
c
p
s
u
n
8
i
w
20
p
1
s
m
p
a
u
t
o
n
a
n
d
d
e
f
c
o
n
f
i
g
.
.
/
.
.
/
.
.
/
.
.
/
c
o
n
f
i
g
/
l
i
n
u
x
?
5.4
/
a
r
c
h
/
a
r
m
/
c
o
n
f
i
g
s
/
t
11
3
n
a
n
d
l
i
n
u
x
s
m
a
l
l
d
e
f
c
o
n
f
i
g
,
产
生
我
们
需
要
的
配
置
文
件
,
然
后
进
行
编
译
,
可
以
看
到
,
有
些
内
核
文
件
已
经
生
成
,
但
是
没
有
生
成
我
们
指
定
的
编
译
产
物
,
我
们
是
需
要
u
I
m
a
g
e
文
件
K
e
r
n
e
l
:
a
r
c
h
/
a
r
m
/
b
o
o
t
/
z
I
m
a
g
e
i
s
r
e
a
d
y
[
O
H
O
S
E
R
R
O
R
]
m
u
l
t
i
p
l
e
(
o
r
n
o
)
l
o
a
d
a
d
d
r
e
s
s
e
s
:
[
O
H
O
S
E
R
R
O
R
]
T
h
i
s
i
s
i
n
c
o
m
p
a
t
i
b
l
e
w
i
t
h
u
I
m
a
g
e
s
[
O
H
O
S
E
R
R
O
R
]
S
p
e
c
i
f
y
L
O
A
D
A
D
D
R
o
n
t
h
e
c
o
m
m
a
n
d
l
i
n
e
t
o
b
u
i
l
d
a
n
u
I
m
a
g
e
[
O
H
O
S
E
R
R
O
R
]
a
r
c
h
/
a
r
m
/
b
o
o
t
/
M
a
k
e
f
i
l
e
:
90
:
r
e
c
i
p
e
f
o
r
t
a
r
g
e
t
′
a
r
c
h
/
a
r
m
/
b
o
o
t
/
u
I
m
a
g
e
′
f
a
i
l
e
d
[
O
H
O
S
E
R
R
O
R
]
m
a
k
e
[
2
]
:
?
?
?
[
a
r
c
h
/
a
r
m
/
b
o
o
t
/
u
I
m
a
g
e
]
E
r
r
o
r
1
[
O
H
O
S
E
R
R
O
R
]
a
r
c
h
/
a
r
m
/
M
a
k
e
f
i
l
e
:
342
:
r
e
c
i
p
e
f
o
r
t
a
r
g
e
t
′
u
I
m
a
g
e
′
f
a
i
l
e
d
[
O
H
O
S
E
R
R
O
R
]
m
a
k
e
[
1
]
:
?
?
?
[
u
I
m
a
g
e
]
E
r
r
o
r
2
[
O
H
O
S
E
R
R
O
R
]
m
a
k
e
[
1
]
:
L
e
a
v
i
n
g
d
i
r
e
c
t
o
r
y
′
/
h
o
m
e
/
d
1
/
o
p
e
n
H
a
r
m
o
n
y
/
t
113
/
o
u
t
/
t
11
3
n
a
n
d
l
i
n
u
x
/
x
i
n
g
y
u
n
t
11
3
n
a
n
d
b
o
a
r
d
/
k
e
r
n
e
l
/
l
i
n
u
x
?
5.
4
′
[
O
H
O
S
E
R
R
O
R
]
k
e
r
n
e
l
.
m
k
:
74
:
r
e
c
i
p
e
f
o
r
t
a
r
g
e
t
′
/
h
o
m
e
/
d
1
/
o
p
e
n
H
a
r
m
o
n
y
/
t
113
/
o
u
t
/
t
11
3
n
a
n
d
l
i
n
u
x
/
x
i
n
g
y
u
n
t
11
3
n
a
n
d
b
o
a
r
d
/
k
e
r
n
e
l
/
l
i
n
u
x
?
5.4
/
a
r
c
h
/
a
r
m
/
b
o
o
t
/
u
I
m
a
g
e
′
f
a
i
l
e
d
[
O
H
O
S
E
R
R
O
R
]
m
a
k
e
:
?
?
?
[
/
h
o
m
e
/
d
1
/
o
p
e
n
H
a
r
m
o
n
y
/
t
113
/
o
u
t
/
t
11
3
n
a
n
d
l
i
n
u
x
/
x
i
n
g
y
u
n
t
11
3
n
a
n
d
b
o
a
r
d
/
k
e
r
n
e
l
/
l
i
n
u
x
?
5.4
/
a
r
c
h
/
a
r
m
/
b
o
o
t
/
u
I
m
a
g
e
]
E
r
r
o
r
2
[
O
H
O
S
E
R
R
O
R
]
y
o
u
c
a
n
c
h
e
c
k
b
u
i
l
d
l
o
g
i
n
/
h
o
m
e
/
d
1
/
o
p
e
n
H
a
r
m
o
n
y
/
t
113
/
o
u
t
/
t
11
3
n
a
n
d
l
i
n
u
x
/
x
i
n
g
y
u
n
t
11
3
n
a
n
d
b
o
a
r
d
/
b
u
i
l
d
.
l
o
g
[
O
H
O
S
E
R
R
O
R
]
c
o
m
m
a
n
d
:
"
/
h
o
m
e
/
d
1
/
o
p
e
n
H
a
r
m
o
n
y
/
t
113
/
p
r
e
b
u
i
l
t
s
/
b
u
i
l
d
?
t
o
o
l
s
/
l
i
n
u
x
?
x
86
/
b
i
n
/
n
i
n
j
a
?
w
d
u
p
b
u
i
l
d
=
w
a
r
n
?
C
/
h
o
m
e
/
d
1
/
o
p
e
n
H
a
r
m
o
n
y
/
t
113
/
o
u
t
/
t
11
3
n
a
n
d
l
i
n
u
x
/
x
i
n
g
y
u
n
t
11
3
n
a
n
d
b
o
a
r
d
"
f
a
i
l
e
d
[
O
H
O
S
E
R
R
O
R
]
r
e
t
u
r
n
c
o
d
e
:
1
[
O
H
O
S
E
R
R
O
R
]
e
x
e
c
u
t
i
o
n
p
a
t
h
:
/
h
o
m
e
/
d
1
/
o
p
e
n
H
a
r
m
o
n
y
/
t
113
然
后
修
改
如
下
文
件
k
e
r
n
e
l
/
l
i
n
u
x
/
b
u
i
l
d
/
k
e
r
n
e
l
.
m
k
,
修
改
内
容
如
下
d
i
f
f
?
?
g
i
t
a
/
k
e
r
n
e
l
/
l
i
n
u
x
/
b
u
i
l
d
/
k
e
r
n
e
l
.
m
k
b
/
k
e
r
n
e
l
/
l
i
n
u
x
/
b
u
i
l
d
/
k
e
r
n
e
l
.
m
k
i
n
d
e
x
56
f
c
d
e
79
e
f
.
.
c
8
d
8
b
41763100644
?
?
?
a
/
k
e
r
n
e
l
/
l
i
n
u
x
/
b
u
i
l
d
/
k
e
r
n
e
l
.
m
k
+
+
+
b
/
k
e
r
n
e
l
/
l
i
n
u
x
/
b
u
i
l
d
/
k
e
r
n
e
l
.
m
k
@
@
?
82
,
7
+
82
,
11
@
@
e
n
d
i
f
i
f
e
q
(
(DEVICE_PATCH_FILE) 或者还可以从如下编译报错信息得知 /bin/sh: /home/d1/openHarmony/t113/kernel/linux/patches/linux-5.4/t113_nand_linux_patch/t113_nand_linux_small.patch: No such file or directory [OHOS ERROR] kernel.mk:74: recipe for target '/home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/kernel/linux-5.4/arch/arm/boot/uImage' failed [OHOS ERROR] make: *** [/home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/kernel/linux-5.4/arch/arm/boot/uImage] Error 1 添加完成后,开始执行hb build编译过程,提示如下信息,没有配置文件。 cp: cannot stat '/home/d1/openHarmony/t113/kernel/linux/config/linux-5.4/.': No such file or directory 在kernel/linux/config/目录下,随便拷贝一个其他版本的linux内核,cp linux-5.10 linux-5.4 -r,然后进入 kernel/linux/config/linux-5.4/arch/arm/configs,先删除不需要的文件。然后去执行一下编译看结果。很显然编译还是报错,提示信息如下 ,很显然,没有对应的配置文件。 Can't find default configuration "arch/arm/configs/t113_nand_linux_small_defconfig"! 那我们就添加需要的配置文件,这里我们用我们之前内核编译时用的配置文件即可,进入到kernel/linux/linux-5.4/arch/arm/configs目录,执行如下命令 cp sun8iw20p1smp_auto_nand_defconfig ../../../../config/linux-5.4/arch/arm/configs/t113_nand_linux_small_defconfig,产生我们需要的配置文件,然后进行编译,可以看到,有些内核文件已经生成,但是没有生成我们指定的编译产物,我们是需要uImage文件 Kernel: arch/arm/boot/zImage is ready [OHOS ERROR] multiple (or no) load addresses: [OHOS ERROR] This is incompatible with uImages [OHOS ERROR] Specify LOADADDR on the commandline to build an uImage [OHOS ERROR] arch/arm/boot/Makefile:90: recipe for target 'arch/arm/boot/uImage' failed [OHOS ERROR] make[2]: *** [arch/arm/boot/uImage] Error 1 [OHOS ERROR] arch/arm/Makefile:342: recipe for target 'uImage' failed [OHOS ERROR] make[1]: *** [uImage] Error 2 [OHOS ERROR] make[1]: Leaving directory '/home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/kernel/linux-5.4' [OHOS ERROR] kernel.mk:74: recipe for target '/home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/kernel/linux-5.4/arch/arm/boot/uImage' failed [OHOS ERROR] make: *** [/home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/kernel/linux-5.4/arch/arm/boot/uImage] Error 2 [OHOS ERROR] you can check build log in /home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board/build.log [OHOS ERROR] command: "/home/d1/openHarmony/t113/prebuilts/build-tools/linux-x86/bin/ninja -w dupbuild=warn -C /home/d1/openHarmony/t113/out/t113_nand_linux/xingyun_t113_nand_board" failed [OHOS ERROR] return code: 1 [OHOS ERROR] execution path: /home/d1/openHarmony/t113 然后修改如下文件kernel/linux/build/kernel.mk,修改内容如下 diff --git a/kernel/linux/build/kernel.mk b/kernel/linux/build/kernel.mk index 56fcde79ef..c8d8b41763 100644 --- a/kernel/linux/build/kernel.mk +++ b/kernel/linux/build/kernel.mk @@ -82,7 +82,11 @@ endif ifeq (
(DEVICEP?ATCHF?ILE)或者还可以从如下编译报错信息得知/bin/sh:/home/d1/openHarmony/t113/kernel/linux/patches/linux?5.4/t113n?andl?inuxp?atch/t113n?andl?inuxs?mall.patch:Nosuchfileordirectory[OHOSERROR]kernel.mk:74:recipefortarget′/home/d1/openHarmony/t113/out/t113n?andl?inux/xingyunt?113n?andb?oard/kernel/linux?5.4/arch/arm/boot/uImage′failed[OHOSERROR]make:???[/home/d1/openHarmony/t113/out/t113n?andl?inux/xingyunt?113n?andb?oard/kernel/linux?5.4/arch/arm/boot/uImage]Error1添加完成后,开始执行hbbuild编译过程,提示如下信息,没有配置文件。cp:cannotstat′/home/d1/openHarmony/t113/kernel/linux/config/linux?5.4/.′:Nosuchfileordirectory在kernel/linux/config/目录下,随便拷贝一个其他版本的linux内核,cplinux?5.10linux?5.4?r,然后进入kernel/linux/config/linux?5.4/arch/arm/configs,先删除不需要的文件。然后去执行一下编译看结果。很显然编译还是报错,提示信息如下,很显然,没有对应的配置文件。Can′tfinddefaultconfiguration"arch/arm/configs/t113n?andl?inuxs?malld?efconfig"!那我们就添加需要的配置文件,这里我们用我们之前内核编译时用的配置文件即可,进入到kernel/linux/linux?5.4/arch/arm/configs目录,执行如下命令cpsun8iw20p1smpa?uton?andd?efconfig../../../../config/linux?5.4/arch/arm/configs/t113n?andl?inuxs?malld?efconfig,产生我们需要的配置文件,然后进行编译,可以看到,有些内核文件已经生成,但是没有生成我们指定的编译产物,我们是需要uImage文件Kernel:arch/arm/boot/zImageisready[OHOSERROR]multiple(orno)loadaddresses:[OHOSERROR]ThisisincompatiblewithuImages[OHOSERROR]SpecifyLOADADDRonthecommandlinetobuildanuImage[OHOSERROR]arch/arm/boot/Makefile:90:recipefortarget′arch/arm/boot/uImage′failed[OHOSERROR]make[2]:???[arch/arm/boot/uImage]Error1[OHOSERROR]arch/arm/Makefile:342:recipefortarget′uImage′failed[OHOSERROR]make[1]:???[uImage]Error2[OHOSERROR]make[1]:Leavingdirectory′/home/d1/openHarmony/t113/out/t113n?andl?inux/xingyunt?113n?andb?oard/kernel/linux?5.4′[OHOSERROR]kernel.mk:74:recipefortarget′/home/d1/openHarmony/t113/out/t113n?andl?inux/xingyunt?113n?andb?oard/kernel/linux?5.4/arch/arm/boot/uImage′failed[OHOSERROR]make:???[/home/d1/openHarmony/t113/out/t113n?andl?inux/xingyunt?113n?andb?oard/kernel/linux?5.4/arch/arm/boot/uImage]Error2[OHOSERROR]youcancheckbuildlogin/home/d1/openHarmony/t113/out/t113n?andl?inux/xingyunt?113n?andb?oard/build.log[OHOSERROR]command:"/home/d1/openHarmony/t113/prebuilts/build?tools/linux?x86/bin/ninja?wdupbuild=warn?C/home/d1/openHarmony/t113/out/t113n?andl?inux/xingyunt?113n?andb?oard"failed[OHOSERROR]returncode:1[OHOSERROR]executionpath:/home/d1/openHarmony/t113然后修改如下文件kernel/linux/build/kernel.mk,修改内容如下diff??gita/kernel/linux/build/kernel.mkb/kernel/linux/build/kernel.mkindex56fcde79ef..c8d8b41763100644???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
(
K
E
R
N
E
L
S
R
C
T
M
P
P
A
T
H
)
A
R
C
H
=
(KERNEL_SRC_TMP_PATH) ARCH=
(KERNELS?RCT?MPP?ATH)ARCH=(KERNEL_ARCH)
(
K
E
R
N
E
L
C
R
O
S
S
C
O
M
P
I
L
E
)
m
o
d
u
l
e
s
p
r
e
p
a
r
e
e
n
d
i
f
+
i
f
e
q
(
(KERNEL_CROSS_COMPILE) modules_prepare endif +ifeq (
(KERNELC?ROSSC?OMPILE)modulesp?repareendif+ifeq((DEVICE_NAME),t113_nand_linux) +$(hide) $(KERNEL_MAKE) -C
(
K
E
R
N
E
L
S
R
C
T
M
P
P
A
T
H
)
A
R
C
H
=
(KERNEL_SRC_TMP_PATH) ARCH=
(KERNELS?RCT?MPP?ATH)ARCH=(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) -j64 uImage LOADADDR=0x40008000 +else $(hide) $(KERNEL_MAKE) -C
(
K
E
R
N
E
L
S
R
C
T
M
P
P
A
T
H
)
A
R
C
H
=
(KERNEL_SRC_TMP_PATH) ARCH=
(KERNELS?RCT?MPP?ATH)ARCH=(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) -j64 uImage endif +endif .PHONY: build-kernel build-kernel: $(KERNEL_IMAGE_FILE) 主要是需要 在我们自己的内核编译过程中添加字段LOADADDR=0x40008000,然后重新进行编译,编译成功,结果如下图所示。说明初步添加内核到openharmony成功。
|