博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux 驱动加载到内核中编译<2>
阅读量:6048 次
发布时间:2019-06-20

本文共 2274 字,大约阅读时间需要 7 分钟。

 

前面只是简单的一个文件,如果一个驱动是多个文件,还放在char目录下,将来维护不是很方便,这样做,可以直接在drivers目录下新建自己的一个目录用来放自己开发的驱动.

步骤如下:

<1> : 首先编写出驱动程序:

main.c

#include
#include
#include
#include
#include
#include
#include "product.h"extern int add(int x1,int x2);static int __init main_init(void){ printk("hello driver init!\n"); int x1=20; int x2=68; printk("%d + %d = %d\n",x1,x2,add(x1,x2)); printk("product name : %s\n",get_product_name()); return 0;}static void __exit main_exit(void){ printk("hello driver exit!\n");}module_init(main_init);module_exit(main_exit);MODULE_AUTHOR("zhibao.liu");MODULE_DESCRIPTION("hello driver information !");MODULE_ALIAS("hello driver alias !");MODULE_LICENSE("GPL");

fun.c

int add(int x1,int x2){    return x1+x2;}

product.c

#include"product.h"char* get_product_name(void){    return "product name : hello driver";}

product.h

extern char* get_product_name(void);

Makefile:

obj-m := hellodriver.ohellodriver-y := fun.o product.o main.o

模块名:hellodriver

build.sh

#!/bin/bashmake -C /usr/src/linux-headers-3.8.0-29-generic M=/root/workspace/drivers/hellodriver

build_t.sh

#!/bin/bashinsmod hellodriver.kodmesg | grep hellodriverecho "-----------------------------------------------"# modinfo hellodriver.kolsmod | grep hellodriverrmmod hellodriverecho "-----------------------------------------------"modinfo hellodriver.ko

<2> : 上面文件准备完成后,编译运行试一下,不出错误就可以了.

<3> : 在要编译的内核drivers目录下新建一个文件夹hellodriver

将上面的*.c,*.h文件拷贝进去,然后冲char文件夹下拷贝Kconfig和Makefile进去,这样就不要自己单独新建了,

删除Kconfig和Makefile里面不要的,添加自己的.

如下:

Kconfig:

## Hello device configuration#menu "Hello devices"config HELLO_DRIVER    bool "hello driver test"    default yendmenu

Makefile:

obj-$(CONFIG_HELLO_DRIVER)    += hellodriver.ohellodriver-y := fun.o product.o main.o

<4> : 上面的Kconfig只能代表hellodriver目录下文件关系,但是hellodriver和drivers文件关系没有建立,即要修改drivers下Kconfig的配置,让它能够找到hellodriver文件目录.

source "drivers/char/Kconfig"source "drivers/hellodriver/Kconfig"

我将其插入在char后面,source相当于include作用,导入(引入)的作用.

同时还需要drivers目录下的Makefile配置:

obj-y                += char/obj-y                += hellodriver/

我同样插入到char目录后面.

<5> : 这样驱动程序编写完成,文件关系建立,就可以make menuconfig:

 

 

<6> : 选择并且保存,就可以make bzImage后就可以得到新的内核,当然你可以只编译模块,make modules.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载地址:http://ietex.baihongyu.com/

你可能感兴趣的文章
java基础---->正则表达式
查看>>
win8 开发之旅(4) --五子棋游戏开发 面向对象的分析
查看>>
mfc在控制多显示器的使用方法
查看>>
rsync 精确同步文件用法 (转载)
查看>>
【Flume】HDFSSink源码理解
查看>>
Using Container Service to Build WeChat Applets
查看>>
RGB颜色转换算法C语言实现
查看>>
用GOACCESS分析NGINX日志
查看>>
Creating Skins with SkinSys Ver 1.0
查看>>
《VMware Virtual SAN权威指南》一3.3 VSAN网络配置之VMware标准交换机
查看>>
只为那句承诺-大话Promise
查看>>
IaaS市场大整合:云用户喜忧参半
查看>>
Skype-Type:一款通过声音窃取键盘记录的Keylogger工具
查看>>
思科收购安全云新贵Observable网络 计划打造自己的Stealthwatch平台
查看>>
这份文件说,英特尔真的要放弃死气沉沉的PC业务了
查看>>
德国公司研发太阳能公路 能源利用率可达15%
查看>>
小区拆墙后看视频安防拐点
查看>>
为实战而生,科达正式发布猎鹰系列智能分析系统
查看>>
2016年存储市场10大趋势
查看>>
雅虎腰斩自家7项业务:计划裁员400多人
查看>>