1、程序hello.c

#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
        printk(KERN_ALERT "hello\n");
        return 0;
}

static void hello_exit(void)
{
        printk(KERN_ALERT "exit\n");
}

module_init(hello_init);
module_exit(hello_exit);

2、Makefile文件

MODULENAME=hello
obj-m:=$(MODULENAME).o
KERNELDIR?=/lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
modules:
        $(MAKE) -C $(KERNELDIR) M=$(PWD)  modules//这里一定要用tab不能用空格,否则编译的时候会出现错误:make: 没有什么可以做的为 `modules'。

3、加载模块

root用户下:insmod ./hello.ko,但是什么输出都没看到。

lsmod查看加载模块能看到hello模块

rmmod hello

在日志文件中查找 cat /var/log/syslog|grep hello能够看到输出

4、安装内核源代码

uname-r 显示内核版本

/usr/src$ ls
linux-headers-3.2.0-23  linux-headers-3.2.0-23-generic-pae
123@123-virtual-machine:/usr/src$ sudo apt-cache search linux-source
[sudo] password for hxy:
linux-source - Linux kernel source with Ubuntu patches
linux-source-3.2.0 - Linux kernel source for version 3.2.0 with Ubuntu patches
123@123-virtual-machine:/usr/src$ sudo apt-get install linux-source-3.2.0

下载完成后

root@123:/usr/src#tar jxvf linux-source-2.6.20.tar.bz2

解压后生成一个新的目录/usr/src/linux-source-3.2.0,所有的源代码都在该目录下。

进入该目录

开始配置内核 选择最快的原版的配置(默认)方式

root@123:/usr/src/linux-source-3.2.0# make oldconfig

make 。

make bzImage

当然,第一个make也可以不执行,直接make bzImage。执行结束后,可以看到在当前目录下生成了一个新的文件: vmlinux, 其属性为-rwxr-xr-x。

然后 :

make modules /* 编译 模块 */
make modules_install /* 安装 模块 */

0704最简单的驱动hello相关推荐

  1. NanoPi NEO Air使用八:编写个简单的驱动和应用程序

    NanoPi NEO Air使用一:介绍 NanoPi NEO Air使用二:固件烧录 NanoPi NEO Air使用三:OverlayFS.CPU温度和频率.wifi.蓝牙.npi-config ...

  2. 简单说说驱动程序设计的入门

    简单说说驱动程序设计的入门,其实初级驱动设计中也能使用C++,也能使用类,但和用户程序中的用法有一些区别,一些特殊的地方需要特别注意.从笔者的经验来看,WDK给出的AVStream小端口驱动示例工程, ...

  3. Linux驱动(7)--最简单的驱动HelloWorld

    最简单的驱动HelloWorld 1. 简述 2. 代码分析 3. 编译步骤 1. 简述 本文的目的是编写基于ARM的最简的驱动程序,也就是令该驱动输出Hello World.驱动(.c文件)相对比较 ...

  4. linux .pc文件make,简单的驱动makefile详解

    简单的驱动makefile详解 一个工程中的源文件不计数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编 ...

  5. ESP32学习笔记( VSCode + ESP-IDF环境) 3 ——GPIO相关的简单外设驱动

    1.如何在VSCode和ESP-IDF的环境下创建工程 说实话,这是我用ESP-IDF在VSCode环境下最不喜欢的事情,在一顿CSDN和百度之后,很多大佬博主都推荐使用VSCode,通过官方示例来进 ...

  6. 字符设备驱动基础篇1——简单的驱动源码分析

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 参考资料:http://www.cnblogs.com/biaohc/p/6575074.html module_test.c代码 #inc ...

  7. atlas 200 简单确认驱动与固件版本的方法

    目录 1. 查看开发者板系统软件的版本 2. 查看固件与驱动版本 3. 确认自己的固件与驱动版本 我的手上有一个atlas 200的盒子,需要做边缘推理,但是不知道它的驱动与固件版本,也就无法安装对应 ...

  8. 四相八拍步进c语言程序,四相八拍的步进电机简单的驱动

    简单介绍: 1. 步进电机:就是将电脉冲信号转变为角位移或者线位移的 开环控制 电机 2. 开环控制:即开环控制系统,就是不降控制的结果反馈回来影响当前控制的系统. 所谓开环:就是没有反馈 3. 四相 ...

  9. 简单字符驱动笔记(朱有鹏)

    框架 static int __init chrdev init(void) {printk(KERN_DEBUG "chrdev_init");return 0; }static ...

  10. c#实现虚拟光驱--应用层(简单涉及驱动部分)

    (原来写在CSDN上的,先转过来一份.要不然开了博不写点东西.总感觉是浪费哈)  用c#实现的虚拟光驱的源代码(使用了minicd.sys)驱动部分未重新实现     代码有点乱.凑合着看吧      ...

最新文章

  1. python 正则表达式 前瞻_正则表达式 For Python
  2. 东莞网络推广浅析网站优化中常见的引流方式有哪些?
  3. android 6.0虚拟内存,Maxwell的统一虚拟内存只用在专业卡上,GTX 750 Ti或无缘
  4. angular语言前端开发_web前端开发入门全套学习方法路径,兼职在家做网站也能月入上万...
  5. 终于用上gcc-4.1编译的系统了
  6. spring boot学习(2) SpringBoot 项目属性配置
  7. Uva 11178 Morley's Theorem 向量旋转+求直线交点
  8. 10 亿元赌约“揭盅”!董明珠与雷军这五年变得更像对方了
  9. python join_python中join()方法介绍
  10. 清空表与删除表mysql
  11. bat 一键清理系统垃圾的修改
  12. android checkboxpreference属性,如何更改android中CheckBoxPreference标题的文本颜色?
  13. VSS的口令破解算法的思路
  14. 哇塞!集齐7张卡片,真的可以召唤神龙耶!
  15. 虚拟偶像PK现实偶像,哪个更能发挥粉丝经济效应?
  16. 刚刚才发现,原来这四款软件可以厉害到这种程度
  17. 微信小程“古康日记“
  18. 10 个 MySQL 经典错误【转】
  19. 一个软件测试人员的经验分享
  20. zynq 加载bit方法总结

热门文章

  1. TypeScript 使用 infer 实现类型推断
  2. c语言运用(1)口算比赛
  3. 随手写程序-t检验计算置信区间
  4. matlab保存bln文件,气象万千(冯锦明课题组)-软件程序
  5. Linux内核启动工作流程初探
  6. C#毕业设计——基于C#+asp.net+sqlserver的计算机等级考试系统设计与实现(毕业论文+程序源码)——计算机等级考试系统
  7. 世界上最健康的作息时间表
  8. 事事有着落,件件有回音——MyAppsp平台督查督办管理系统
  9. Python爬虫实战:《战狼2》豆瓣影评分析
  10. 申宝股票-三大指数震荡下行