跳转至

LINUX_SDK源码编译

SDK源码获取

Note

1.源码不可放在共享目录下编译
2.编译主机不可用ROOT账号登陆

1.SDK下载,拷贝源码压缩包到编译主机目录。

2.进入源码所在目录,输入命令解压。

tar -zxvf *.tar.gz

3.进入解压生成的aw-image-build目录,输入命令恢复源码。

git reset --hard

编译界面

Tip

确保编译环境正常联网,编译过程中自动下载安装所需工具。

进入aw-image-build目录,输入命令进入交互式构建界面。

./build.sh

Note

Build all step :构建完整镜像,自动执行step1到step4。
step1.Build Kernel:单独编译内核。
step2.Build U-boot:单独编译u-boot。
step3.Build base-rootfs and deb packages:构建根文件系统镜像并打包自定义deb软件包。
step4.Pack image:将系统镜像的各个部分按规则打包成一个完整的用于烧录的镜像。
clean source/build/out files:清理拉取的源代码、构建过程中产生的文件、最终输出的镜像。

主板镜像构建

1.只需要构建一个用于主板启动的镜像,选择 Build all step 进入下一步。

2.选择要构建的主板,如kickpi-k2b Allwinner H618。

3.选择jammy Ubuntu

4.选择构建的根文件系统是否为桌面版,如 desktop

5.选择根文件系统的桌面环境,如 Xfce

6.选择根文件系统桌面环境的配置文件,默认是 base configuration。

7.使用空格选择根文件系统预装的软件包,按Enter键开始构建过程,构建完成后镜像保存在out/images目录下。

单步镜像构建

对用户而言,如果要对主板进行二次开发,预装应用、修改调试内核等,就涉及到了根文件系统或内核的单独构建, 此时可以选择单步构建的方式。

Step1.build_Kernel

1.进入交互式构建界面,可以看到,除了使用 Build all step 进行一键构建以外,还有step1到step4的单步构建选项, 实际上一键构建的过程就是顺序调用这四部分脚本的过程。

2.进入step1.Build Kernel,选择编译内核的主板,如 kickpi-k2b Allwinner H618,等待构建结束。

3.等待编译结束,终端会打印信息。

Tip

Kernel deb path:编译生成的内核deb文件保存路径
Kernel deb name:编译生成的内核deb包名称

4.根据Kernel deb path找到生成的内核deb包,传输到正在运行的主板中, 在主板终端中使用dpkg -i linux-***.deb,重启主板,内核更新成功。

内核配置修改

在完成Step1.build_Kernel步骤后,通过修改内核配置文件来开启或关闭内核的某项功能,应该如何操作。

1.通过Step1.build_Kernel步骤中打印的辅助信息Compiler kernel path找到内核。

2.内核配置修改命令参考。

# 此处目录地址为Compiler kernel path
cd Compiler kernel path
# 加载配置文件
make ARCH=arm64 linux_h618_defconfig
# 修改内核配置文件 
make ARCH=arm64 menuconfig
# 修改完成后保存并退出menuconfig配置页面,此时修改的配置保存在.config中,我们还需要将修改同步到板卡的内核配置文件中 
# 保存defconfig配置文件 
make ARCH=arm64 savedefconfig 
# 使用生成的defconfig文件替换板卡配置文件 
cp defconfig arch/arm64/configs/linux_h618_defconfig 
# 查看主板配置文件修改的内容 
git diff arch/arm64/configs/linux_h618_defconfig

Step2.build_Uboot

单独编译u-boot并将生成的u-boot镜像打包为deb。

1.进入交互式构建界面,选择要编译的主板,等待编译结束。

2.编译结束,通过Terminal打印的辅助信息找到deb文件保存路径。

Tip

Target directory:编译生成的u-boot deb文件保存路径。
File name:编译生成的u-boot deb名称。

3.通过Target directory找到u-boot deb文件。

4.插入U盘,将u-boot deb拷贝至U盘。

Tip

可以通过U盘,xxx的形式将生成的deb包传输到主板中,此处采用U盘的形式传输u-boot deb。

5.将U盘插入主板,将u-boot deb拷贝至主板文件系统中,进入主板Terminal输入命令进行安装。

//进入deb所在路径
cd Deb
//安装Deb
sudo dpkg -i kickpi-k2b-uboot-currentxxxx.deb

6.输入下列命令,选择Install/Update the bootloader on SD/EMMC,使用脚本将u-boot deb写入主板,覆盖原来的u-boot。

# 使用管理员权限运行脚本 
sudo nand-sata-install 

7.忽略警告选择Yes。

8.覆盖完成后,输入命令重启主板即可使用更新后的u-boot。

reboot

设备树修改

Note

设备树路径: aw-image-build/source/kernel/linux-5.4-h618/arch/arm64/boot/dts/sunxi sun50iw9-kickpi-k2b.dts sun50iw9-kickpi-k2c.dts

1.执行Step1.build_Kernel。

2.执行Step2.build_Uboot。

3.将Step2.build_Uboot产生的Deb文件传输进主板,在板卡中执行dpkg -i kickpi-k2b-uboot-currentxxxx.deb命令。

4.执行nand-sata-install选择”Install/Update the bootloader on SD/eMMC“更新uboot ,更新完成进行重启。

工具

Note

编译完成时会在此目录有编译工具链:
aw-image-build/toolchains/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi/bin
添加自己的应用和工具可放在这个目录下:
aw-image-build/external/packages/bsp/common

常见问题

  • 编译cec驱动失败?

image-20250820150033592

​ 参考以下修改:

--- a/source/kernel/linux-5.4-h618/drivers/media/cec/cec-pin.c
+++ b/source/kernel/linux-5.4-h618/drivers/media/cec/cec-pin.c
@@ -42,7 +42,7 @@
 /* when polling for a state change, sample once every 50 microseconds */
 #define CEC_TIM_SAMPLE                 50

-#define CEC_TIM_LOW_DRIVE_ERROR                (1.5 * CEC_TIM_DATA_BIT_TOTAL)
+#define CEC_TIM_LOW_DRIVE_ERROR                (3/2 * CEC_TIM_DATA_BIT_TOTAL)

 /*
  * Total data bit time that is too short/long for a valid bit,