即新功能源码与内核其它代码一起编译进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 在新功能源码与Linux内核源码在同一目录结构下
如:在linux-3.14/driver/char/目录下编写.c文件
2 给新功能配置Kconfig
3 因为添加了源码,所以改写makefile,编译
4 make menuconfig里选中添加得新功能
5 重新make uImage