第四章:SDK获取与目录结构

好,咱们进入正题。拿到联发科的SDK,是开发的第一步。这一步走顺了,后面就省心很多。

我个人习惯,先把SDK的来路搞清楚。联发科的SDK,一般有两个渠道:

  • 官方渠道:联发科官网的开发者专区,或者通过代理商申请。需要签NDA,流程正规。
  • 合作伙伴渠道:比如一些方案公司、模组厂商。他们拿到的SDK,可能带了一些定制化的东西。

我建议,尽量走官方渠道。为什么?因为版本最干净,更新也及时。我在项目中遇到过,用合作伙伴给的SDK,结果发现某个驱动库版本不对,排查了整整两天。嗯,血的教训。

4.1 获取SDK源码包

拿到SDK后,通常是一个压缩包。比如 mtk_sdk_v2.1.0.tar.gz 这种。解压命令很简单:

tar -xzvf mtk_sdk_v2.1.0.tar.gz

解压后,你会看到一个顶层目录。别急着进去翻,先看看目录结构。联发科的SDK,顶层目录通常长这样:

目录名 作用
kernel/ Linux内核源码,驱动开发的核心
bootloader/ 启动引导程序,比如U-Boot
buildroot/ 构建根文件系统的工具链
vendor/ 联发科私有的库、驱动、中间件
device/ 板级配置、设备树文件
out/ 编译输出目录,生成镜像文件
docs/ 官方文档、API手册
scripts/ 编译脚本、工具脚本

你想想看,这个结构其实很清晰。内核、引导、文件系统,三大件各占一个目录。联发科把私有的东西放在 vendor/ 里,这样和开源代码就分开了。

4.2 深入理解各目录

咱们一个一个来看。先说 kernel/。这里面就是标准的Linux内核源码,但联发科会打上自己的补丁。比如添加了MTK的硬件驱动、电源管理模块等。我建议,先看看 kernel/arch/arm/boot/dts/ 下的设备树文件,那里定义了板级硬件信息。

再说 bootloader/。联发科用的通常是U-Boot,但做了深度定制。比如支持从NAND、eMMC、SD卡等多种介质启动。我记得有一次,客户要求从SPI NOR Flash启动,我就是在 bootloader/board/ 下修改配置才搞定的。

buildroot/ 这个目录,说白了就是用来构建根文件系统的。它里面包含了交叉编译工具链、各种库、应用软件。联发科会提供一个默认的配置文件,比如 mtk_defconfig。你直接 make 就能生成一个可用的文件系统。

重点提醒vendor/ 目录下的东西,是联发科的核心资产。比如多媒体编解码库、硬件加速模块、安全引擎等。这些代码不开源,只提供二进制库。你编译时,链接的就是这些库。

4.3 避坑指南

我曾经犯过一个低级错误。拿到SDK后,直接 make 编译,结果报了一堆错。后来发现,是因为没有设置环境变量。联发科的SDK,通常需要先执行 source build/envsetup.sh 来初始化环境。

还有,out/ 目录下的编译产物,别乱删。有时候你改了配置,重新编译,但 out/ 里残留了旧文件,会导致奇怪的问题。我建议,每次大改后,执行 make clean 或者直接删除 out/ 目录。

小技巧:在 docs/ 目录里,通常有 Release_Notes.txtFAQ.txt。我每次拿到新SDK,第一件事就是看这两个文件。里面会说明已知问题、修复的bug、以及一些注意事项。能省不少排查时间。

4.4 目录结构实战

咱们来实际操作一下。假设你解压后的SDK目录是 mtk_sdk/。进入后,执行 ls -l,你会看到类似这样的输出:

drwxr-xr-x 12 user user 4096 Jan 10 10:00 kernel
drwxr-xr-x  8 user user 4096 Jan 10 10:00 bootloader
drwxr-xr-x 15 user user 4096 Jan 10 10:00 buildroot
drwxr-xr-x 20 user user 4096 Jan 10 10:00 vendor
drwxr-xr-x  5 user user 4096 Jan 10 10:00 device
drwxr-xr-x  3 user user 4096 Jan 10 10:00 out
drwxr-xr-x  4 user user 4096 Jan 10 10:00 docs
drwxr-xr-x  2 user user 4096 Jan 10 10:00 scripts
-rw-r--r--  1 user user 1234 Jan 10 10:00 Makefile
-rw-r--r--  1 user user 5678 Jan 10 10:00 README.md

看到那个 Makefile 了吗?顶层Makefile是整个SDK的编译入口。你执行 make 时,它会依次调用各个子目录的Makefile。

我个人习惯,先看看 README.md。里面会说明SDK的版本、依赖的工具链、编译步骤等。别小看这个文件,有时候能救命。

4.5 总结一下

SDK的目录结构,说白了就是联发科给你搭好的开发框架。你只要按照它的规矩来,就能顺利编译出固件。记住几个关键点:

  • kernel/:驱动开发的主战场
  • bootloader/:启动流程的起点
  • buildroot/:文件系统的构建工厂
  • vendor/:联发科的私有宝藏
  • device/:板级配置的管家

嗯,这一章就到这里。下一章,咱们聊聊如何搭建交叉编译环境。那可是让代码在板子上跑起来的关键一步。