LINUX_SDK源码编译
SDK源码获取
Note
1.源码不可放在共享目录下编译
2.编译主机不可用ROOT账号登陆
1.SDK下载,拷贝源码压缩包到编译主机目录。
2.进入源码所在目录,输入命令解压。

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

编译界面
Tip
确保编译环境正常联网,编译过程中自动下载安装所需工具。
进入aw-image-build目录,输入命令进入交互式构建界面。

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输入命令进行安装。

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

7.忽略警告选择Yes。

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

设备树修改
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驱动失败?

参考以下修改:
--- 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,