0704最简单的驱动hello
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相关推荐
- NanoPi NEO Air使用八:编写个简单的驱动和应用程序
NanoPi NEO Air使用一:介绍 NanoPi NEO Air使用二:固件烧录 NanoPi NEO Air使用三:OverlayFS.CPU温度和频率.wifi.蓝牙.npi-config ...
- 简单说说驱动程序设计的入门
简单说说驱动程序设计的入门,其实初级驱动设计中也能使用C++,也能使用类,但和用户程序中的用法有一些区别,一些特殊的地方需要特别注意.从笔者的经验来看,WDK给出的AVStream小端口驱动示例工程, ...
- Linux驱动(7)--最简单的驱动HelloWorld
最简单的驱动HelloWorld 1. 简述 2. 代码分析 3. 编译步骤 1. 简述 本文的目的是编写基于ARM的最简的驱动程序,也就是令该驱动输出Hello World.驱动(.c文件)相对比较 ...
- linux .pc文件make,简单的驱动makefile详解
简单的驱动makefile详解 一个工程中的源文件不计数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编 ...
- ESP32学习笔记( VSCode + ESP-IDF环境) 3 ——GPIO相关的简单外设驱动
1.如何在VSCode和ESP-IDF的环境下创建工程 说实话,这是我用ESP-IDF在VSCode环境下最不喜欢的事情,在一顿CSDN和百度之后,很多大佬博主都推荐使用VSCode,通过官方示例来进 ...
- 字符设备驱动基础篇1——简单的驱动源码分析
以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 参考资料:http://www.cnblogs.com/biaohc/p/6575074.html module_test.c代码 #inc ...
- atlas 200 简单确认驱动与固件版本的方法
目录 1. 查看开发者板系统软件的版本 2. 查看固件与驱动版本 3. 确认自己的固件与驱动版本 我的手上有一个atlas 200的盒子,需要做边缘推理,但是不知道它的驱动与固件版本,也就无法安装对应 ...
- 四相八拍步进c语言程序,四相八拍的步进电机简单的驱动
简单介绍: 1. 步进电机:就是将电脉冲信号转变为角位移或者线位移的 开环控制 电机 2. 开环控制:即开环控制系统,就是不降控制的结果反馈回来影响当前控制的系统. 所谓开环:就是没有反馈 3. 四相 ...
- 简单字符驱动笔记(朱有鹏)
框架 static int __init chrdev init(void) {printk(KERN_DEBUG "chrdev_init");return 0; }static ...
- c#实现虚拟光驱--应用层(简单涉及驱动部分)
(原来写在CSDN上的,先转过来一份.要不然开了博不写点东西.总感觉是浪费哈) 用c#实现的虚拟光驱的源代码(使用了minicd.sys)驱动部分未重新实现 代码有点乱.凑合着看吧 ...
最新文章
- python 正则表达式 前瞻_正则表达式 For Python
- 东莞网络推广浅析网站优化中常见的引流方式有哪些?
- android 6.0虚拟内存,Maxwell的统一虚拟内存只用在专业卡上,GTX 750 Ti或无缘
- angular语言前端开发_web前端开发入门全套学习方法路径,兼职在家做网站也能月入上万...
- 终于用上gcc-4.1编译的系统了
- spring boot学习(2) SpringBoot 项目属性配置
- Uva 11178 Morley's Theorem 向量旋转+求直线交点
- 10 亿元赌约“揭盅”!董明珠与雷军这五年变得更像对方了
- python join_python中join()方法介绍
- 清空表与删除表mysql
- bat 一键清理系统垃圾的修改
- android checkboxpreference属性,如何更改android中CheckBoxPreference标题的文本颜色?
- VSS的口令破解算法的思路
- 哇塞!集齐7张卡片,真的可以召唤神龙耶!
- 虚拟偶像PK现实偶像,哪个更能发挥粉丝经济效应?
- 刚刚才发现,原来这四款软件可以厉害到这种程度
- 微信小程“古康日记“
- 10 个 MySQL 经典错误【转】
- 一个软件测试人员的经验分享
- zynq 加载bit方法总结
热门文章
- TypeScript 使用 infer 实现类型推断
- c语言运用(1)口算比赛
- 随手写程序-t检验计算置信区间
- matlab保存bln文件,气象万千(冯锦明课题组)-软件程序
- Linux内核启动工作流程初探
- C#毕业设计——基于C#+asp.net+sqlserver的计算机等级考试系统设计与实现(毕业论文+程序源码)——计算机等级考试系统
- 世界上最健康的作息时间表
- 事事有着落,件件有回音——MyAppsp平台督查督办管理系统
- Python爬虫实战:《战狼2》豆瓣影评分析
- 申宝股票-三大指数震荡下行