【米尔STM32MP135】linux系统增减和调整板极设备驱动
[复制链接]
对于嵌入linux系统设备驱动的调整和驱动开发是必要技能,但是由于linux系统驱动开发太过于复杂。linux系统的设备定制就成为一件很头疼的事,但是如果你看到今天的测试,我想你会对linux的项目有所改观,随着linux系统的不断发展,其驱动程序也在不断地发展,从最开始地集成式内核驱动发展到动态模块化驱动,在到设备树的引用,发展到现在的虚拟平台驱动,虽然驱动本身的结构也越来越复杂,但是驱动代码的编写却越来越简单了。因为驱动程序的分层越来越清晰,驱动代码每层的代码量变小了。有时我只需要调整少量的代码就可以使板子工作,象本次测试的米尔开发板这种结构,分成“核心板”和“扩展板”的结构,开发产品时可以只是用厂家的核心板,定制的部分自己开发PCB就可以了,驱动程序微调一下就可以了。
前面的介绍说了个大概,下面就使用ST的openLinux系统为例进行实际的介绍。
如果你不想完全的自制系统,就需要使用米尔的BSP系统,因为STM32MP135的安全机制的引入linux内核是不能随便的使用设备驱动和不配套的内核系统的,但是对于本次实验似乎没有不要,因为这次只是为板子增加一个LED引脚,调整一下设备树而已。
1、安装前面测试的步骤,保证下载的内核源码能够通过,将板子的内核和设备树*.dtb文件更换成编译好的文件。
Modify, rebuild and reload the Linux® kernel参考该链接的步骤
- root@myd-yf13x:~
- Linux myd-yf13x 5.15.67-g9cec825a70d7-dirty
- root@myd-yf13x:~
2、修改设备树文件
修改前建议对设备树文件进行备份,
- vim myb-stm32mp135x-base.dtsi
在文件中寻找leds一节
- leds {
- compatible = "gpio-leds";
- led-blue {
- function = LED_FUNCTION_HEARTBEAT;
- color = <LED_COLOR_ID_BLUE>;
- gpios = <&gpioh 12 GPIO_ACTIVE_LOW>;
- linux,default-trigger = "heartbeat";
- default-state = "off";
- };
- };
添加系列内容
- leds {
- compatible = "gpio-leds";
- led-blue {
- function = LED_FUNCTION_HEARTBEAT;
- color = <LED_COLOR_ID_BLUE>;
- gpios = <&gpioh 12 GPIO_ACTIVE_LOW>;
- linux,default-trigger = "heartbeat";
- default-state = "off";
- };
-
- led-green {
- label = "stm32mp:green:user";
- gpios = <&gpioa 14 GPIO_ACTIVE_LOW>;
- default-state = "on";
- status = "okay";
- };
- };
修改后存盘
编译设备树文件,将设备树更新到开发板当中
- root@myd-yf13x:~
- blue:heartbeat stm32mp:green:user
- root@myd-yf13x:~
-
可以发现新增加的设备已经可以使用了。
后记:目前的linux 5.1内核大部分驱动都已经支持这样的操作,编写驱动也可以只编写内核有关的部分,如系统电源管理、接口等程序都已经标准化了只要遵照标准就可以了,甚至就如上面的操作,只是修改一下设备树设置就可以增减设备文件。目前我实验的设备有uart、USB、SPI设备、ADC设备。
|