编写一个hello_world.c的驱动程序;

hello_world.c;

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>   //指定license版本
MODULE_LICENSE("GPL");              //设置初始化入口函数
static int __init hello_world_init(void)
{printk(KERN_DEBUG "hello world!!!\n");return 0;
}//设置出口函数
static void __exit hello_world_exit(void)
{printk(KERN_DEBUG "goodbye world!!!\n");
}//将上述定义的init()和exit()函数定义为模块入口/出口函数
module_init(hello_world_init);
module_exit(hello_world_exit);

写一个makefile;

obj-m+=hello_world.o
all:make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
clean:make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) clean

执行make命令;没有make命令;执行 sudo apt install make,来安装make命令;

再执行make;提示下图错误;

把makefile文件中的提示出错行的空格改为Tab键盘;

再执行make命令;提示没有Makefile文件;

把makefile改为Makefile;此文件没有后缀名;

然后再make;gcc没有安装,

安装gcc;

构建驱动程序成功;如下图;hello_world.ko出来了,这个是构建好的驱动程序;

执行insmod,加载,

加载成功;用lsmod列出模块看一下,hello_world驱动已经被加载;

下面看一下写一个测试程序来测试一下驱动;test.c;

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>#include <stdio.h>
#include <stdlib.h>int main(int argc, char **argv)
{int fd;int val = 1;fd = open("hello_world", O_RDWR);if(fd == -1){printf("can't open...\n");exit(EXIT_FAILURE);}read(fd, &val, sizeof(val));exit(EXIT_SUCCESS);
}

gcc一下;出现下图错误;下回再整;

Linux下编译构建成功HelloWorld驱动程序并加载相关推荐

  1. Linux下的ELF文件、链接、加载与库(含大量图文解析及例程)

    Linux下的ELF文件.链接.加载与库 链接是将将各种代码和数据片段收集并组合为一个单一文件的过程,这个文件可以被加载到内存并执行.链接可以执行与编译时,也就是在源代码被翻译成机器代码时:也可以执行 ...

  2. linux内核使用scons构建,linux下编译构建工具--scons下载地址及说明

    介绍:Scons是一个开放源码.以Python语言编码的自动化构建工具,可用来替代make编写复杂的makefile.并且scons是跨平台的,只要scons脚本写的好,可以在Linux和Window ...

  3. linux装百度网盘不能运行,百度网盘Linux版不能登录成功,打开一直加载的解决方法...

    如果你安装了百度网盘Linux版,打开一直加载,一直不能登录成功,那请按照下面方法处理.如果你要在深度deepin系统中安装百度网盘,请到商店中去安装,已经上架百度网盘客户端了. 出现的状况及解决方法 ...

  4. linux下nginx监听443端口 重新加载配置不生效,需要重启nginx

    在nginx里放开443的监听,执行 nginx -s reload 命令,访问https不生效 需kill调nginx的进程重新后方能添加443端口的监听 参考 https://blog.csdn. ...

  5. Linux下编译、链接、加载运行C++ OpenCV的两种方式及常见问题的解决

    Linux下编译.链接.加载运行C++ OpenCV的两种方式及常见问题的解决 在Linux下安装完OpenCV C++之后(还没有安装的读者请参考Ubuntu 18.04 安装OpenCV C++) ...

  6. linux 保存编译log,(转)Linux下编译安装log4cxx

    一个项目的服务器端在Linux平台下,用到了开源日志库log4cxx,这个库是apache项目的一个子库.功能很不错.下面记录下它的编译和安装过程. 第一步安装apr-1.3.8,顺序不能错,它必须首 ...

  7. Linux 下编译并运行C语言程序

    Linux下编译并运行C语言程序 ,以Centos 系统为例 1>新建一个hello.c文件 可以直接用图形用户界面新建也可以使用命令新建. 用命令行的话,要用到Linux下的vi编辑器的相关命 ...

  8. linux3.10.53编译,根据官方文档在Linux下编译安装Apache

    根据官方文档在Linux下编译安装Apache 前言 永远记住官方文档才是最准确的安装手册,这篇文章仅为对官方文档的解读和补充,学习提升务必阅读官方文档: http://httpd.apache.or ...

  9. linux如何编译boost指定库,linux下编译安装boost库

    linux下编译安装boost库 先看一下系统环境 Linux o-pc 3.19.0-22-generic #22-Ubuntu SMP Tue Jun 16 17:15:15 UTC 2015 x ...

最新文章

  1. SAP 取月度期初库存和月度期末库存(历史库存)
  2. Linq to Oracle 使用教程(八)使用 T4 模版生成代码
  3. python 数据平滑_数据平滑方法的原理和应用
  4. 微软与 OpenAI 达成合作,获得 GPT-3 独家使用授权!
  5. barco控制软件支持linux_vnc远程控制软件linux,在linux系统上能够使用的vnc远程控制软件...
  6. iterator总结(未完)
  7. 全网首发:linux任务栏分组的研究
  8. 流程和企业成熟度模型(PEMM)
  9. ABAQUS使用功能总结
  10. 动态壁纸安卓_高清无水印!这4款壁纸软件,让你的手机好看又独特
  11. 2.4g低功耗SI24R1校园答题器
  12. vue中用js将json数据按英文字母顺序进行排序
  13. TestNG跳过某个测试方法
  14. 故事版xib --view上添加tableview
  15. Latex使用遇到的问题
  16. 大家都在努力,你凭什么不努力?
  17. Windows环境下Nginx配置本地虚拟域名和Nginx代理
  18. 论文分享:基于深度强化学习的无人机三维导航
  19. VDD、VBAT、VDDA、VREF+区别
  20. Could not connect to archive.ubuntukylin.com:10006 (120.240.95.35), connection timed out

热门文章

  1. 开机出现grub rescue无法进入系统 恢复ubuntu系统下grub引导 windows xp和ubuntu9.10双系统引导程序的修复
  2. 计算属性一般是没有set方法, 只读属性 ||计算属性的缓存
  3. 从hotspot底层对象结构理解锁膨胀升级过程||深入jdk源码理解longadder的分段cas优化机制——分段CAS优化
  4. 使用git将本地项目上传到github
  5. 为什么我们的web前端变的越来越复杂
  6. 学习《FreeRTOS源码详解与应用开发》笔记
  7. CTFshow 信息收集 web1
  8. sdut 3361迷宫探索dfs
  9. [YTU]_2446( C++习题 输入输出--私有继承)
  10. dot--向量或矩阵的点乘