linux驱动开发环境配置 构造内核源代码树
来源:互联网 发布:家境好的男生特点知乎 编辑:程序博客网 时间:2024/06/05 11:00
初次接触linux驱动开发,这篇文章对配置linux驱动开发环境有很大帮助,在此留作记录,也希望对大家有帮助。同时感谢原作者的分享
来源:季义钦BLOG 作者:季义钦
初次接触Linux驱动程序开发,买了一本《Linux设备驱动程序》,第一件事当然就是构建开发环境了!!!
它上面有一个Hello World的列子:
//hello.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void){
printk(KERN_ALERT "Hello, world/n");
return 0;
}
static void hello_exit(void){
printk(KERN_ALERT"Goodbye, cruel world/n");
}
module_init(hello_init);
module_exit(hello_exit);
下面我们来看怎么让它跑起来:
驱动程序和用户程序可不一样,它是作为一个模块连接到内核模块来运行的,运行在内核空间里面。
所以要运行我们自己构造的模块,需要自己的系统已经配置好内核树,然后把目标模块和内核树连接起来运行!但是我们安装的Linux没有源码(至少我的是这样),更不要说已经编译好的内核树了~
(1)下载Linux源码:
首先查看可以下载的Linux内核源码包
root@jiq-desktop:~#apt-cache search linux-source
然后选定要下载的源码包:
root@jiq-desktop:~#apt-get install linux-source-2.6.22
下载完成后,在/usr/src下,文件名为:linux-source-2.6.32.tar.bz2,是一个压缩包,然后用
命令解压即可获得Linux内核的源代码:
root@jiq-desktop:/usr/src#tar jxvf linux-source-2.6.32.tar.bz2
(2)然后在Linux内核源码目录/usr/src/linux-source-2.6.32目录下面用老的方法配置好Linux内核:
root@jiq-desktop:/usr/src/linux-source-2.6.32#make oldconfig
(3)然后执行:
root@jiq-desktop:/usr/src/linux-source-2.6.32#make bzImage
这个过程大概需要一个小时左右。。。执行完成后会在当前目录下面生成一个文件vmlinux.o
(4)然后编译模块:
root@jiq-desktop:/usr/src/linux-source-2.6.32#make modules
这个过程又是大概一个小时。。。
(5)然后便可以安装模块了:
root@jiq-desktop:/usr/src/linux-source-2.6.32#make modules_install
这个过程大概两分钟:
以上步骤完成以后,会在/lib/modules目录下面生成一个文件夹linux-2.6.32-24-generic,至此你差不多已经成了,因为你已经构造好了内核树!!!
下面开始在自己的工程文件夹下面建立两个文件:
hello.c(不用说了)
Makefile(它需要能够找到内核树,然后将目标模块链接上去):
注意里面各种变量的颜色额~有兴趣的读者可以自己去研究一下这个文件,里面唯一和hello.c相关的部分就是
obj-m := hello.o 那一行了!第5行表明了内核树build目录的位置。
下面在当前目录下面执行
root@jiq-desktop:/usr/jiq/DriverProject#make
生成以下文件
然后利用insmod命令将模块插入到内核树 中:
root@jiq-desktop:/usr/jiq/DriverProject#insmod ./hello.ko
模块装载触发hello.c的init()方法,输出hello world,如果没有的话,是因为其将输出放到/var/log/syslog中去了。打开便可以看见你的结果!
卸载目标模块命令是:
root@jiq-desktop:/usr/jiq/DriverProject#rmmod ./hello.ko
至此你已经成功迈出了Linux驱动开发的第一步~
- linux驱动开发环境配置 构造内核源代码树
- Linux驱动开发环境配置(内核源码树构造)
- Linux驱动开发环境配置(内核源码树构造)
- Linux驱动开发环境配置(内核源码树构造) --------转
- [linux]驱动开发环境配置(内核源码树构造)
- Linux驱动开发环境配置(内核源码树构造)
- Linux驱动开发环境配置(内核源码树构造)
- Fedora配置构造Linux内核源代码树
- linux驱动开发之内核树配置
- window 内核驱动开发环境配置
- Linux驱动环境配置之内核树的建立
- Linux驱动开发环境搭建之一(建立内核树)
- Linux + ARM驱动开发环境配置(内核配置与编译)
- linux驱动开发环境的配置
- linux下arm驱动开发环境配置
- Linux驱动开发之环境配置
- linux 内核驱动开发
- Linux驱动开发之环境搭建----Ubuntu 12.4 编译内核
- Linux网络编程(3):信号处理与定时机制简要学习
- android笔记
- linux tunnel
- stl库之泛型
- JBoss 系列三十一:JBoss Data Grid(Infinispan)缓存模式
- linux驱动开发环境配置 构造内核源代码树
- android ADB shell 命令启动 android程序
- Android之音乐播放器——进阶版
- 【初始化】——方法中的成员需要自己初始化,类中的成员默认初始化值
- 黑马程序员_源自梦想 内部类
- JAVA动态代理实现aop的简单例子
- 《Java知识点列表》V1.0
- PXAlertView——可用来替代UIAlertView,iOS7风格。可自行定制
- C#获取Windows下光标位置[鼠标光标]