lv13 内核模块静态添加功能 5
2023-12-26 23:26:07
一、向内核添加新功能(把程序添加到内核启动)
1.1 静态加载法:
即新功能源码与内核其它代码一起编译进uImage文件内
-
新功能源码与Linux内核源码在同一目录结构下
在linux-3.14/driver/char/目录下编写myhello.c,文件内容如下:
#include <linux/module.h> #include <linux/kernel.h> ? int __init myhello_init(void) { printk("#####################################################\n"); printk("#####################################################\n"); printk("#####################################################\n"); printk("#####################################################\n"); ? ?printk("myhello is running\n"); printk("#####################################################\n"); printk("#####################################################\n"); printk("#####################################################\n"); printk("#####################################################\n"); return 0; } ? void __exit myhello_exit(void) { printk("myhello will exit\n"); } MODULE_LICENSE("GPL"); module_init(myhello_init); module_exit(myhello_exit); /* 这是一个Linux内核模块,用于向Linux内核添加新的功能或驱动程序。 在这个例子中,模块名为"myhello",使用了GPL授权协议。函数module_init()和module_exit()分别是在模块加载时和卸载时执行的初始化和退出函数。 在myhello_init()函数中,打印了一些日志信息,表示模块已经成功加载运行起来了。 在myhello_exit()函数中,打印了一条日志信息,表示模块即将被卸载。 */
-
给新功能代码配置Kconfig
#进入myhello.c的同级目录 cd ~/fs4412/linux-3.14/drivers/char ? vim Kconfig #39行处添加如下内容: config MY_HELLO tristate "This is a hello test" help This is a test for kernel new function
-
给新功能代码改写Makefile
#进入myhello.c的同级目录 cd ~/fs4412/linux-3.14/drivers/char ? vim Makefile #拷贝18行,粘贴在下一行,修改成: obj-$(CONFIG_MY_HELLO) ? ? += myhello.o #在CONFIG_后面添加与.c文件名同名函数名称
-
make menuconfig 界面里将新功能对应的那项选择成<*>
? ? ? ? ? ? ? ? ?cd ~/fs4412/linux-3.14 make menuconfig #make menuconfig如果出错,一般是两个原因: #1. libncurses5-dev没安装 #2. 命令行界面太小(太矮或太窄或字体太大了)
-
make uImage
-
cp arch/arm/boot/uImage /tftpboot
-
启动开发板观察串口终端中的打印信息
1.2 练习
?如何实现静态加载展示?
1 在新功能源码与Linux内核源码在同一目录结构下
如:在linux-3.14/driver/char/目录下编写.c文件
2 给新功能配置Kconfig
3 因为添加了源码,所以改写makefile,编译
4 make menuconfig里选中添加得新功能
5 重新make uImage
文章来源:https://blog.csdn.net/m0_60718520/article/details/135231402
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!