嵌入式Linux 添加LED驱动程序,测试程序学习
第一次尝试开发移植Linux上的驱动,还是和当年单片机一样,从最简单的LED小灯开始,走走流程
试验结果:LED驱动已经编译进系统(产生.o文件),LED测试程序已经编译成功(产生可执行文件),但是由于疫情手头没板子, 没法上板测试,开学之后测试吧。写的有点乱想到哪写哪吧,自己能看懂就行吧,有不懂的朋友可以留言。
内核源码:飞凌提供的的kernel源码
目标板:飞凌的ok335xd,am3354
试验前提:已经有了LED驱动程序ledcdev.c
LED测试程序myledapp.c
移植涉及的主要7个文件:1.以上两个.c文件
2.在内核文件中的drivers/misc/下新建myled文件夹,其中新建文件Kconfig,Makefile
3.myled上层目录(misc)中的Kconfig,Makefile文件
4..config文件,kernel总目录下的,靠menuconfig界面改,可vi查看添加结果/搜索指令
语法了解:Makefile语法和基本规则
Kconfig语法和基本规则
基本思想:驱动程序与测试程序分离,先编写驱动程序,添加到内核文件,将驱动编译进内核;然后编写测试程序,编译,启动 系统,将编译完的可执行文件通过NFS移进板子,运行文件,测试程序运行
Kconfig,Makefile,menuconfig,.config关系理解:
Makefile和Kconfig是Linux中重要的两条线,上级的Kconfig,Makefile调用下级的Kconfig,Makefile,Kconfig中写的东西 要在menuconfig中的菜单里显示,Makefile决定哪些文件要进行编译。
有了驱动改好这四个文件(上级下级共四个)后在menuconfig中启用设备驱动,Kconfig中写的东西要在menuconfig 中的菜单里显示,menuconfig中设置完之后改变kernel下的.config文件,Makefile根据.config文件决定将led的驱动程 序编译进系统。
基本流程: 驱动程序移植
1.在misc中新建myled文件夹,在其中通过vim新建Kconfig,Makefile
2.在myled下的Kconfig,Makefile写入对应代码(具体写法此文不进行赘述)
3.在myled上层目录即misc文件中的Kconfig,Makefile中写入对应代码(路径和编译成.o的指令)
4.kernel文件下 make menuconfig进入界面找到myled选项,选上*,退出保存,vi .config,查看是否有MYLEDTEST
5.驱动移植完毕,编译内核
添加测试程序
1.编写测试程序,编译生成可执行文件
2.将可执行文件文件移进板子运行
关键指令注意事项:
编辑mytestapp: gedit myledapp.c
查看交叉编译器版本:arm-arago-linux-gnueabi-gcc -v
编译LED测试程序myledapp.c: arm-arago-linux-gnueabi-gcc -o ledtest myledapp.c
编译内核:make CROSS_COMPILE=arm-arago-linux-gnueabi- ARCH=arm uImage
关于Makefile和Kconfig:
make menuconfig 进入配置界面(在内核文件夹下)
vi Makefile :打开Makefile进行编辑,没有的话,自动新建一个进行编辑
vi ../Makefile:打开上一级的。。。。。。
vi Kconfig :打开Kconfig进行编辑,没有的话,自动创建一个进行编辑
vi ../Kconfig : 打开上级的。。。。
vim操作注意事项:
更全的查看:https://blog.****.net/qq_36071362/article/details/104372454
1.如果操作滚轮和方向键有ABCD,卸掉vim装vim,以下方法
方法2:ubuntu预装的是 vim tiny,安装vim full版本,可以解决
卸载vim-tiny:
$ sudo apt-get remove vim-common
安装vim full:
$ sudo apt-get install vim
2.不同模式切换:刚进入是命令模式,按i进入输入模式进行编辑
编辑完成后按esc,输入:进入命令模式
输入wq保存退出(还有q! wq!强制退出,q,w)
3./搜索指令
没图不舒服:附上阶段性成果图片
图1-2:menuconfig界面中出现我们的设备,选用设备
图3. .config中出现。。。=y
图4. 驱动程序中编译出来.o文件(随系统内核一块编译出来的)
图5. 测试程序使用同样的交叉编译器编译成ledtest可执行文件(单独编译,在移进板子运行)
图6.。。。。。YY测试成功,小灯闪烁,,,试验成功的话再回来改