2.2 编译测试 - kernel
创建仓库
-
在 gitlab 上创建 SS928 kernel 仓库,并命名为
SS928_KERNEL_V4.19
。 -
进入开发虚拟机,克隆仓库:
cd ~ mkdir -p hiss928/kernel && cd hiss928/kernel git clone http://gitlab.xxx.com/KERNEL/SS928_KERNEL_V4.19.git ss928_kernel_v4.19 cd ss928_kernel_v4.19
添加源代码
-
kernel 源代码可以在 SDK 中找到,添加步骤如下:
cd ~/hiss928/sdk/ema_2.0.2.2/SS928V100_SDK_V2.0.2.2/open_source/linux/ # 拷贝源码包 cp -f Makefile linux-4.19.90.tar.gz linux-4.19.90.patch ~/hiss928/kernel/ss928_kernel_v4.19 cd ~/hiss928/kernel/ss928_kernel_v4.19/ # 解压源码包 tar -xf linux-4.19.90.tar.gz # 应用补丁文件 mv linux-4.19.90.patch linux-4.19.90/ cd linux-4.19.90/ patch -p1 < linux-4.19.90.patch
编译 kernel
-
编译步骤如下:
# 将工具链加入系统路径 source ~/hiss928/sdk/ss928_sdk_g7.3_k4.19/env_setup.sh # 先彻底清理一次 make ARCH=arm64 CROSS_COMPILE=aarch64-mix210-linux- distclean # 加载配置文件 make ARCH=arm64 CROSS_COMPILE=aarch64-mix210-linux- ss928v100_emmc_defconfig # 编译 kernel make ARCH=arm64 CROSS_COMPILE=aarch64-mix210-linux- -j16 uImage # 最后生成的文件为 uImage,所在目录为 arch/arm64/boot/uImage # 这里先不验证能不能用,编译成功即可
-
编译中遇到的问题:multiple definition of `yylloc’; scripts/dtc/dtc-lexer.lex.o
- 原因:由于本人使用的虚拟机(ubuntu 22.04)的 gcc (11.4.0) 版本过高。
- 解决:修改
scripts/dtc/Makefile
,定位到 12 行,在HOST_EXTRACFLAGS
后添加-fcommon
完善仓库
-
步骤如下:
make ARCH=arm64 CROSS_COMPILE=aarch64-mix210-linux- distclean cd .. rm -f Makefile linux-4.19.90.tar.gz mv linux-4.19.90/* . rm -rf linux-4.19.90 linux-4.19.90.patch
-
推送代码到远端。