Linux驱动开发--内核模块编译

一.内核编译方法

1.静态加载

即新功能源码与内核其它代码一起编译进uImage文件内

1. 新功能源码与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);
  

2. 给新功能代码配置Kconfig

cd  ~/fs4412/linux-3.14/drivers/char

vim Kconfig

添加此代码:

config MY_HELLO

      tristate "This is a hello test"

      help

         This is a test for kernel new function

3. 给新功能代码改写Makefile

   #进入myhello.c的同级目录

#进入myhello.c的同级目录
cd  ~/fs4412/linux-3.14/drivers/char

vim Makefile
#拷贝18行,粘贴在下一行,修改成:
obj-$(CONFIG_MY_HELLO)     += myhello.o

4.make menuconfig 界面里将新功能对应的那项选择成<*>

cd  ~/fs4412/linux-3.14
make menuconfig

 

 

5. 编译内核make uImage

6. 内核复制到开发板中

cp arch/arm/boot/uImage ~/tftpboot

7. 启动开发板观察串口终端中的打印信息

2.动态加载法:

即新功能源码与内核其它源码不一起编译,而是独立编译成内核的插件(被称为内核模块)文件.ko

a、新功能源码与Linux内核源码在同一目录结构下时

  1. 给新功能代码配置Kconfig

  2. 给新功能代码改写Makefile

  3. make menuconfig 界面里将新功能对应的那项选择成<M>

  4. make uImage

  5. cp arch/arm/boot/uImage /tftpboot

  6. make modules

    make modules会在新功能源码的同级目录下生成相应的同名.ko文件(生成的ko文件只适用于开发板linux)

    注意此命令执行前,开发板的内核源码已被编译

b、新功能源码与Linux内核源码不在同一目录结构下时

  1. cd ~/fs4412
  2. mkdir mydrivercode
  3. cd mydrivercode
  4. cp ../linux-3.14/drivers/char/myhello.c .
  5. vim Makefile
  6. make (生成的ko文件适用于主机ubuntu linux)
  7. make ARCH=arm (生成的ko文件适用于开发板linux,注意此命令执行前,开发板的内核源码已被编译)
#file命令可以查看指定ko文件适用于哪种平台,用法:
file  ko文件
#结果带x86字样的适用于主机ubuntu linux,带arm字样的适用于开发板linux

c、主机ubuntu下使用ko文件

sudo insmod ./???.ko  #此处为内核模块文件名,将内核模块插入正在执行的内核中运行 ----- 相当于安装插件
lsmod #查看已被插入的内核模块有哪些,显示的是插入内核后的模块名
sudo rmmod ??? #,此处为插入内核后的模块名,此时将已被插入的内核模块从内核中移除 ----- 相当于卸载插件

sudo dmesg -C  #清除内核已打印的信息
dmesg #查看内核的打印信息

d、开发板Linux下使用ko文件

#先将生成的ko文件拷贝到/opt/4412/rootfs目录下:
cp ????/???.ko  /opt/4412/rootfs

#在串口终端界面开发板Linux命令行下执行
insmod ./???.ko  #将内核模块插入正在执行的内核中运行 ----- 相当于安装插件
lsmod #查看已被插入的内核模块有哪些
rmmod ??? #将已被插入的内核模块从内核中移除 ----- 相当于卸载插件

内核随时打印信息,我们可以在串口终端界面随时看到打印信息,不需要dmesg命令查看打印信息

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值