5.1.1《深入浅出设备树(Devicetree):从原理到实战绑定》

张开发
2026/4/12 16:52:16 15 分钟阅读

分享文章

5.1.1《深入浅出设备树(Devicetree):从原理到实战绑定》
设备树这玩意儿,到底解决了什么痛点?最近在调试一块新板子,内核启动卡在Uncompressing Linux... done, booting the kernel.之后。打开earlyprintk一看,内核在of_platform_populate()里报了个错,提示某个I2C控制器下的设备地址冲突。翻出代码一看,驱动里写死了i2c_register_board_info(0, i2c_devices, ARRAY_SIZE(i2c_devices));,而新板子上这个I2C控制器编号早就变了。这种场景十年前太常见了。每次换块板子,哪怕CPU相同,外围设备稍有变动,就得重新编译内核——或者更糟,在几十个arch/arm/mach-xxx/目录里翻找那个该死的board-xxx.c文件,修改里面的static struct i2c_board_info数组。一个内核镜像只能对应一块特定板卡,这种日子你们还记得吗?硬编码的板级信息:ARM Linux的“原罪”早期ARM Linux内核里充斥着这样的代码:// arch/arm/mach-s3c24xx/mach-smdk2440.c(别这样写,现在看都是泪)static

更多文章