以下是为MTK 9300开发板移植Linux系统(以Debian为例)的详细技术指南,涵盖环境搭建、内核移植、驱动适配(摄像头/显示器/WiFi)、系统集成与优化。
MTK 9300开发板Linux系统移植全流程指南
1 项目概述
1.1 硬件平台
SoC:MediaTek MTK9300 (ARMv8-A架构,4×Cortex-A78 + 4×Cortex-A55)
外设:
MIPI CSI-2摄像头接口 ×2
HDMI 2.1 + MIPI DSI显示输出
MT7921K WiFi6/BT5.2模块
4GB LPDDR5 + 64GB UFS 3.1
开发板接口:USB 3.0 Type-C ×2, PCIe 3.0 ×1, 40-pin GPIO扩展口
1.2 软件起点
基线代码:Android 13 (Kernel 5.10 LTS)
目标系统:Debian 12 Bookworm (ARM64)
2 开发环境搭建
2.1 主机系统配置
# Ubuntu 22.04 LTS
sudo apt install gcc-aarch64-linux-gnu u-boot-tools
flex bison libssl-dev device-tree-compiler
git-lfs swig python3-dev
2.2 交叉工具链
# ARM官方工具链 (aarch64-none-linux-gnu)
wget https://developer.arm.com/-/media/Files/downloads/gnu/12.3.rel1/binrel/arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz
tar xvf arm-gnu-toolchain-*.tar.xz
export CROSS_COMPILE=/path/to/bin/aarch64-none-linux-gnu-
2.3 源码仓库
# 内核源码 (基于MTK官方仓库)
git clone -b mtk-5.10 https://github.com/mediatek/linux.git
# U-Boot源码
git clone https://github.com/u-boot/u-boot.git
# Debian根文件系统
wget https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/debian-12.4.0-arm64-netinst.iso
3 Bootloader移植
3.1 U-Boot配置适配
文件:u-boot/arch/arm/dts/mt9300-evb.dts
/ {
memory@40000000 {
device_type = "memory";
reg = <0x40000000 0x10000000>; // 匹配开发板内存布局
};
chosen {
stdout-path = &uart0;
};
};
&uart0 {
status = "okay";
};
&usb0 {
dr_mode = "otg";
status = "okay";
};
3.2 DDR初始化参数提取
使用MTK专有工具从Android bootloader提取:
python3 mtk_bootinfo_extract.py preloader.bin > ddr_init_params.h
在U-Boot board初始化代码中包含该头文件:
// u-boot/board/mediatek/mt9300/init.c
#include "ddr_init_params.h"
void mtk_ddr_init() {
// 应用时序参数
writel(DDR_CFG_REG1, 0x10000000);
...
}
3.3 编译与烧写
make mt9300_evb_defconfig
make -j8
使用fastboot烧录:
fastboot flash u-boot u-boot.bin
4 Linux内核移植
4.1 设备树适配
关键文件:linux/arch/arm64/boot/dts/mediatek/mt9300-evb.dts
4.1.1 显示子系统
&mipi_dsi {
status = "okay";
panel@0 {
compatible = "panel-dpi";
reg = <0>;
port {
panel_in: endpoint {
remote-endpoint = <&dsi_out>;
};
};
};
ports {
port@0 {
dsi_out: endpoint {
remote-endpoint = <&panel_in>;
};
};
};
};
&hdmi {
status = "okay";
hdmi-supply = <&hdmi_reg>;
};
4.1.2 摄像头接口
&i2c1 {
status = "okay";
clock-frequency = <400000>;
camera_sensor: ov13855@36 {
compatible = "ovti,ov13855";
reg = <0x36>;
reset-gpios = <&pio 15 GPIO_ACTIVE_LOW>;
avdd-supply = <&camera_power>;
clocks = <&camera_clk>;
port {
camera_out: endpoint {
remote-endpoint = <&csi_in>;
};
};
};
};
&csi {
status = "okay";
port {
csi_in: endpoint {
remote-endpoint = <&camera_out>;
};
};
};
4.2 内核配置
# 启用关键驱动
make ARCH=arm64 menuconfig
# 配置选项:
CONFIG_DRM_MEDIATEK=y
CONFIG_DRM_MEDIATEK_HDMI=y
CONFIG_MEDIA_PLATFORM_DRIVERS=y
CONFIG_VIDEO_MEDIATEK_CSI=y
CONFIG_MT7921E=m # WiFi驱动
CONFIG_SND_SOC_MTK_SOF=y # 音频
4.3 编译内核与模块
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j8
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- modules_install INSTALL_MOD_PATH=./modules_out
5 外设驱动适配
5.1 WiFi驱动 (MT7921K)
步骤:
固件准备:从Android提取mt7921_rom_patch.bin和mt7921_wa.bin
内核驱动配置:
CONFIG_MT7921E=m
CONFIG_MT7921S=m # SDIO版本
加载验证:
insmod mt7921e.ko
dmesg | grep mt7921 # 查看驱动加载日志
5.2 摄像头驱动
OV13855驱动适配:
// drivers/media/i2c/ov13855.c
static const struct regval ov13855_init_settings[] = {
{
0x0100, 0x00}, // 软复位
{
0x0103, 0x01},
...
};
// 添加设备树匹配
static const struct of_device_id ov13855_of_match[] = {
{
.compatible = "ovti,ov13855" },
{
}
};
5.3 显示输出调试
DRM调试命令:
# 查看显示接口状态
cat /sys/kernel/debug/dri/0/state
# 强制HDMI输出模式
echo 1920x1080-60 > /sys/class/drm/card0-HDMI-A-1/mode
6 Debian系统构建
6.1 根文件系统制作
# 解压Debian基础系统
mkdir rootfs && cd rootfs
7z x debian-12.4.0-arm64-netinst.iso
# 配置APT源
echo "deb http://deb.debian.org/debian bookworm main" > etc/apt/sources.list
# 安装必要软件
chroot . /bin/bash
apt install ssh net-tools wireless-tools
6.2 系统服务配置
文件:/etc/systemd/system/wifi-setup.service
[Unit]
Description=WiFi Initialization
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/iw dev wlan0 set type managed
ExecStart=/usr/bin/ip link set wlan0 up
ExecStart=/usr/bin/wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
[Install]
WantedBy=multi-user.target
6.3 镜像打包
# 生成ext4镜像
dd if=/dev/zero of=rootfs.img bs=1M count=2048
mkfs.ext4 rootfs.img
mount -o loop rootfs.img /mnt
cp -a rootfs/* /mnt
umount /mnt
# 整合到Android boot镜像
mkbootimg --kernel arch/arm64/boot/Image.gz
--ramdisk rootfs.img
--output boot-linux.img
7 系统启动与调试
7.1 U-Boot启动参数
# 设置内核启动命令
setenv bootargs 'console=ttyS0,115200 earlycon=uart8250,mmio32,0x11002000 root=/dev/mmcblk0p2 rw'
saveenv
7.2 内核启动日志分析
常见问题排查:
[ 1.235600] mmc_host mmc0: Bus speed (slot 0) = 200000Hz (mode 0) # SD卡未初始化成功
[ 2.110000] mtk-drm 14000000.display-controller: Failed to find panel # 显示设备树错误
[ 3.450000] ov13855 1-0036: Could not get control 'avdd' # 电源管理未配置
7.3 性能优化
内核参数调整:
# /etc/sysctl.conf
vm.swappiness=10
kernel.sched_latency_ns=6000000
kernel.sched_migration_cost_ns=500000
8 外设功能验证
8.1 摄像头测试
# 安装v4l2工具
apt install v4l-utils
# 检测设备
v4l2-ctl --list-devices
# 捕获图像
ffmpeg -f v4l2 -i /dev/video0 -frames 1 test.jpg
8.2 WiFi连接测试
# 扫描网络
iw dev wlan0 scan
# 创建WPA配置
wpa_passphrase "SSID" "password" > /etc/wpa_supplicant.conf
# 连接网络
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B
dhclient wlan0
8.3 显示输出测试
# 安装X11测试工具
apt install x11-apps
# 运行测试程序
xeyes -geometry 1920x1080+0+0
9 高级功能扩展
9.1 GPU加速支持
# 编译Mali G610驱动
git clone https://github.com/mediatek/kernel_modules_gpu.git
cd kernel_modules_gpu
make -C /lib/modules/$(uname -r)/build M=$PWD
# 验证OpenGL
glmark2-es2-wayland --fullscreen
9.2 功耗管理优化
// 添加CPU闲置状态
&cpu0 {
cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>;
};
&cluster0 {
idle-states {
CLUSTER_SLEEP_0: cluster-sleep-0 {
compatible = "arm,idle-state";
entry-latency-us = <500>;
exit-latency-us = <1000>;
min-residency-us = <2500>;
};
};
};
10 附录
10.1 关键命令速查
| 功能 | 命令 |
|---|---|
| 重新编译设备树 | make dtbs |
| 查看中断分配 | cat /proc/interrupts |
| 调试I2C设备 | i2cdetect -y 1 |
| 显示时钟树 | cat /sys/kernel/debug/clk/clk_summary |
10.2 参考文档
[MTK9300 Datasheet v1.2] MediaTek Confidential
[ARMv8-A Architecture Reference Manual] ARM DDI 0487I.a
[Debian ARM Port] https://wiki.debian.org/Arm64Port
10.3 已知问题跟踪
| 问题 | 状态 | 解决方案 |
|---|---|---|
| HDMI音频输出无声 | 已修复 | 更新ALSA配置参数 |
| WiFi吞吐量低于预期 | 调查中 | 优化MT7921固件加载时序 |
| 摄像头长时间工作掉帧 | 未解决 | 调整CSI-2时钟相位 |

















暂无评论内容