来源:季义钦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驱动开发的第一步~

转载于:https://www.cnblogs.com/armlinux/archive/2010/12/20/2390871.html

Linux驱动开发环境配置(内核源码树构造)相关推荐

  1. win10 + WDK10+ VS2015 + vmware_win10 驱动开发环境配置

    自从WDK8.1后,开发window 驱动不用再用windbg + 虚拟机调试了,我们调试驱动也可以像调试EXE 一样方便,下面是win10(主机) + WDK10+ VS2015 + vmware_ ...

  2. arm linux 内核配置,Linux + ARM驱动开发环境配置(内核配置与编译)

    要想编写驱动,首先是建立内核目录树. ** 1.查看ARM开发板的内核版本 ** uname -a 我的arm开发板的版本是3.4.39 ** 2.安装必要的软件包 ** sudo apt-get i ...

  3. Win8.1+VS2013+WDK8.1+VirtualBox or VMware 驱动开发环境配置

    开发Windows驱动,我选择的环境是Win8.1+VS2013+WDK8.1+VirtualBox.理由如下: ①开发机器和测试机器均安装Win8.1,其中开发机器安装的是64位Win8.1,测试机 ...

  4. (31)驱动开发环境配置(VS2010+WDK7600)

    本文介绍如何在WIN10配置XP驱动开发环境. 注意,VS2010和WDK都是安装在物理机的. 一.安装VS2010 https://docs.microsoft.com/zh-cn/visualst ...

  5. VS2019 windows驱动开发环境配置

    配置Windows驱动开发环境 VS2019 下载VS2019 下载链接 https://visualstudio.microsoft.com/zh-hans/downloads/ 选择你所需要的开发 ...

  6. Win10下VS2015(WDK10)驱动开发环境配置

    1.     概述 微软在"WDK7600"以后就不再提供独立的内核驱动开发包了,而是必须首先安装微软集成开发环境VisualStudio,然后再从微软官网下载集成的WDK开发包. ...

  7. Linux 驱动开发环境构建

    1.查看当前系统内核代码版本 caojiaju@caojiaju-iMac:~$ sudo apt-cache search linux-source [sudo] password for caoj ...

  8. Visual Studio Code搭建linux驱动开发环境

    前言 Visual Studio Code是一个很优秀的开发软件,但我们并不能直接用来驱动开发.因为驱动开发所需要的头文件来自Linux内核,这就要求我们自己添加内核文件. 一.获取内核? 1.官网 ...

  9. VS2013+WDK8.1 驱动开发环境配置

    Windows Driver Kit 是一种完全集成的驱动程序开发系统,它包含Windows Driver Device Kit (DDK),用于测试 Windows 驱动器的可靠性和稳定性,本次实验 ...

最新文章

  1. 【转载】xmind的使用安装方法
  2. 十亿红包还不够,揭秘快手春节四大技术玩法:AI/AR/MR都被装进App,为了这个春晚真拼了...
  3. 【技术综述】图像与CNN发家简史,集齐深度学习三巨头
  4. linux命令we,Linux学习篇之基础命令
  5. odoo xml样式_自定义Odoo的界面样式
  6. java当中日期类的相关操作(学习笔记)
  7. Docker容器数据卷讲解
  8. 微信小程序-简易计算器
  9. 使C#代码现代化——第三部分:值
  10. 从零开始打造数据中心的N道门槛 | 又拍干货分享
  11. python 装饰器实现_Python学习之路:装饰器实现终极版
  12. SAP 物料编码更改标准解决方案
  13. creo绘图属性模板_creo完整制作工程图模板.docx
  14. apr_thread使用内存之谜
  15. 计算机设备如何巡检,计算机联锁设备巡检作业指导书.pdf
  16. android OTA更新
  17. 伤感!!!!!!!!!!!!!!!
  18. 牵手腾讯视频,爱普生离年轻人更近了
  19. 数据结构(C语言)-广义表
  20. 电子计算机制作探测,金属探测器DIY,你真正了解过多少?

热门文章

  1. IO流之过滤流介绍:
  2. nslookup默认服务器修改,Nslookup命令的使用 - [详细]
  3. 解决idea中连接MySQL数据库后写SQL语句没有提示
  4. 001_Gson概述
  5. 005_CSS通配符选择器
  6. python生成器函数_【python】生成器和生成器函数
  7. Java NIO 系列教程
  8. 考博024001计算机科学与技术综合知识,2005-2006年同等学力人员申请硕士学位学科综合水平全国统一考试计算机科学与技术试卷.pdf...
  9. vue 怎么在字符串中指定位置插入字符_vue 我想在一个字符串中间加入一个/br 该怎么写?...
  10. php调用shell执行scp,Shell中使用scp命令实现文件上传代码