LINUX驱动开发环境搭建

  • 一、 前言
  • 二、系统环境
    • Ubuntu
    • VMWare{非必选}
  • 三、开发环境搭建
    • 1.用于简单学习(Header)
    • 2.用于复杂驱动开发(源码树)
      • a. 基本包
      • b. 内核源码获取及编译
  • 四、驱动开发简单示例【HelloWorld】
    • 1. Linux C文件
    • 2. Makefile文件
    • 3. 驱动编译、加载及卸载
  • 五、参考链接
  • 六、写在最后的话【应该没有彩蛋】
    • 彩蛋?

一、 前言

本文以流水账为记述方式,叙述了从零开始在Ubuntu系统环境下建立LINUX驱动开发环境的过程,并提供了简单的例子。目的是为了给新手或者其它需要建立LINUX驱动开发环境的技术人员或DIY爱好者提供一个简单明了的建立过程。

为减少误解,现提供本文的记述时间:【二〇二〇年初冬】。

二、系统环境

Ubuntu

下表为最近的三个版本Ubuntu的简介及下载链接,博主建议选取最新的LTS版本,这样在系统维护服务上会有保障。

系统版本 系统名称 发布时间 终止维护时间 官方推荐系统配置
16.04.7(LTS) Xenial Xerus
18.04.5(LTS) Bionic Beaver
20.04.1(LTS) Focal Fossa April 2025 CPU:2 GHz(双核);内存:4 GB;硬盘:25 GB

:上表中标明“—”的代表:“官网未标明,请自行搜索信息”

VMWare{非必选}

官方免费版下载地址或自行搜索免费版,关键字:VMware Workstation Player,或从这里下载。

Ubuntu虚拟机硬件配置

  1. 配置要求:根据使用需求,最低配置要求如下:
开发环境 最低配置
简单学习开发环境 单核≥2GHz、内存≥2GB、硬盘空间≥20GB
复杂驱动开发环境 单核≥2GHz、内存≥3GB、硬盘空间≥60GB
  1. 其它要求:如有其它要求可自行尝试设置或自行搜索相关信息。

三、开发环境搭建

1.用于简单学习(Header)

如果仅需要简单的开发或者学习使用(如完成本文中HelloWorld驱动开发),则只需要安装以下基本工具:

sudo apt-get update
sudo apt-get install build-essential #获取基本开发工具,

2.用于复杂驱动开发(源码树)

可参见此链接做更详细的解答,下面仅列举主要步骤:

a. 基本包

深入开发Linux驱动,应选用以下代码构建环境(未标明尝试或非必须的就是一定要安装的)

sudo apt-get update
sudo apt-get install kernel-package #测试中会出现缺这缺那的情况,如以下包会丢失,如编译源码出现错误,可尝试执行
sudo apt-get install flex bison
#和/或
sudo apt-get install libssl-dev
#和/或
sudo apt-get install libelf-dev #libelf-devel or elfutils-libelf-devel
#如仍未解决,可自行搜索或尝试解决方案#编译生成menuconfig配置内核界面所需文件(非必须)
sudo apt-get install libncurses5-dev#开发版本管理及自动化包
sudo apt-get install automake#此处可能会有版本号
sudo apt-get install autoconf cvs subversion

b. 内核源码获取及编译

获取方式有两种:

  1. 从官网获取,获取后将解压后的linux-source-<version>文件夹放入/usr/src中。
  2. 使用apt指令获取:
sudo apt-cache search linux-source
sudo apt-get install linux-source-<version>
#<version>为当前linux内核版本号,如当前为5.4.0,即将所有的<version>替换为5.4.0
#安装成功后会放在/usr/src中,文件名称 tar jxvf linux-source-<version>.tar.bz2
cd /usr/src/
sudo tar jxvf linux-source-<version>.tar.bz2

之后再编译源码

cd /usr/src/linux-source-<version>
#以下三选一
sudo make config #逐一选择kernel的配置形式
#或
sudo make oldconfig #按原有kernel配置配置kernel
#或
sudo make menuconfig #使用可视化环境配置kernel#编译内核的过程
sudo make #编译内核,时间较长,可能会长达1小时及以上,如5.4.0用时约3-5个小时
#此时已完成了镜像编译和所有modules编译,如果不确定可以使用以下指令再编译
sudo make modules #编译内核驱动modules
sudo make bzImage #编译内核镜像#加载modules的过程
sudo make modules_install #安装内核模块
#检查安装
cd /lib/modules
#如果安装正常这里面会出现以版本号为文件名的文件夹,就证明安装成功了,如5.4.xx或5.4.xx-xx-generic

至此内核编译完成。

四、驱动开发简单示例【HelloWorld】

使用命令在桌面新建一个hello的文件夹,并新建hello.cMakefile文件

mkdir ~/Desktop/hello
cd ~/Desktop/hello
touch hello.c Makefile

1. Linux C文件

~/Desktop/hello文件夹下,使用gedit 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);

2. Makefile文件

~/Desktop/hello文件夹下,使用gedit Makefile打开文件后,键入以下代码:

ifneq ($(KERNELRELEASE),) #注意此行开头顶格, ifneq和括号之间有一个空格obj-m:=hello.o #注意此行开头为一个空格
else #注意此行开头顶格KERNELDIR:=/lib/modules/$(shell uname -r)/build #注意此行开头为一个空格PWD:=$(shell pwd) #注意此行开头为一个空格
default: #注意此行开头顶格$(MAKE) -C $(kerneldir) M=$(PWD) modules #注意此行开头为Tab,Tab不能用空格替代!
endif #注意此行开头顶格

3. 驱动编译、加载及卸载

~/Desktop/hello文件夹下,使用以下代码编译驱动:

sudo make # in ~/Desktop/hello

使用以下代码加载驱动:

sudo insmod hello.ko # 加载hello.ko驱动

使用以下代码卸载驱动:

sudo rmmod hello #卸载hello驱动

使用以下代码查看驱动返回值:

dmesg |tail -5 #查看日志最后5行代码

总的测试过程如下:

#汇总过程为
sudo insmod hello.ko
sudo rmmod hello
dmesg |tail -5
#如无其他事件发生,在接连加载、卸载驱动hello.ko后,
#会在最后两行获取到返回值
#加载返回值:[<cpu_time>] hello: hello, world
#卸载返回值:[<cpu_time>] hello: Goodbye, cruel world

五、参考链接

感谢以下文章,不过单一的一篇文章并不能很好的兼容现有的安装,总会出现缺这缺那的情况,所以参考了许多的文章,主要链接写在下面:

  1. Linux源码树结构;
  2. 修改密码教程及获取root权限;
  3. vmware扩容教程1、vmware扩容教程2;

其中有有用的链接也列举如下。

  1. 相关链接1,BUG解决相关链接。
  2. 特别好的链接

其中还有一些解决bug的链接因为没有存储,所以这里也就没有给出,如果遇到相关的问题可以自行搜索~~~

六、写在最后的话【应该没有彩蛋】

确实建立这个环境挺折腾人的,比如说,学习第一个例程Helloworld的时候就直接N填编译失败而不知错在哪里,那种感觉真的是很崩溃,虽然这应该是一种技术摸索的常态,虽然经常碰见但仍会引起不适。

为了方便查阅,也是为了分享给米娜桑一点经验吧,少走弯路,避免进入上手即放手、入门即放弃的怪圈,要知道有时候技术自嗨起来[捂脸]还是很开心的~欢迎大家入技术之大坑。

彩蛋?

暂无

[LINUX]LINUX驱动开发最简环境搭建(适用于新手)相关推荐

  1. linux设备驱动开发之环境搭建(基于exynos4412)

    第一章 linux设备驱动开发之环境搭建(基于exynos4412) 目录 第一章 linux设备驱动开发之环境搭建(基于exynos4412) 1.搭建开发板运行环境 1.1.交叉开发模式 安装交叉 ...

  2. 嵌入式 Linux 内核驱动开发【The first day: 36093万字】

    嵌入式 Linux 内核驱动开发[1] 嵌入式 Linux 内核驱动开发前言 第1章 Linux 内核裁剪和定制 [1]Linux 内核开发简介 [2] Linux 源码阅读工具 [1.2.1]Sou ...

  3. Linux设备驱动开发基础

    1.驱动概述和开发环境搭建 1.1驱动设备的作用 对设备驱动最通俗的解释就是"驱动硬件设备行动".驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的 ...

  4. 正点原子linux驱动教程,正点原子 手把手教你学Linux之驱动开发篇

    简 介 该课程是正点原子手把手教你学Linux系列课程,该课程配套开发板为正点原子alpha/mini Linux开发板. 手把手教你学Linux之驱动开发篇: 第1讲 Linux驱动开发与裸机开发区 ...

  5. Linux字符驱动开发学习总结

    linux驱动编写(虚拟字符设备编写) 昨天我们说了一些简单模块编写方法,但是终归没有涉及到设备的编写内容,今天我们就可以了解一下相关方面的内容,并且用一个实例来说明在linux上面设备是如何编写的. ...

  6. linux设备驱动开发专业论坛www.linuxdriver.cn诚征斑竹

    www.linuxdriver.cn诚征斑竹,一起繁荣Linux设备驱动开发专业论坛的人气,共同致力于提高中国工程师的Linux设备驱动开发水平,普及Linux设备驱动开发知识.[url]www.li ...

  7. 《Linux设备驱动开发详解》学习笔记一

    Linux设备驱动开发详解学习笔记<一> 书名:<Linux设备驱动开发详解>第二版 主机环境:Linux version 2.6.25-14.fc9.i686@Fedora ...

  8. linux 设备驱动 ppt,linux设备驱动开发详解讲座ppt

    PPT内容 这是linux设备驱动开发详解讲座ppt下载,主要介绍了设备驱动简介:建立和运行模块:字符驱动:调试技术:并发和竞争:分配内存:硬件通讯:中断处理:块设备驱动,欢迎点击下载. 嵌入式Lin ...

  9. 《Linux设备驱动开发详解(第2版)》隆重出版

    Linux设备驱动开发详解(第2版)(前一版狂销3万册,畅销书最新升级) [新品] 点击看大图     基本信息 * 作者: 宋宝华       * 出版社:人民邮电出版社     * ISBN:97 ...

最新文章

  1. pl/sql中三种游标循环效率对比
  2. 新书上市 | 流行SQL引擎Presto,官方实战指南来了
  3. linux下mysql tmp满_MySQL服务器/tmp目录被占满
  4. pythonif有多个条件怎么办_Python中if有多个条件处理方法
  5. 天籁数学——数列篇(1)
  6. VTK:可视化之ShepardInterpolation
  7. 根据工作时间计算小组成员得分
  8. 图解,C语言希尔排序
  9. 构造函数、实例、原型对象、继承
  10. 西瓜书——极大似然估计和朴素贝叶斯
  11. diff测试与流量回放测试
  12. 解决C#程序只允许运行一个实例的几种方法详解
  13. Deepracer 学了就能云驾驭赛车? Deepracer机器学习进阶版干货分享!
  14. Python官方中文开发文档
  15. 兆骑科创平台创新创业赛事路演,投融资服务
  16. Java带宽限速器、Springboot限速器
  17. JAVA 支付宝支付_史诗级简单教程(SpringBoot)
  18. 短信业务 防恶意攻击解决方案
  19. oracle 结果集已耗尽_结果集已耗尽
  20. 【Planning】Firm type used in R3 Planning - Manual Firm and regular run

热门文章

  1. ASN.1编码格式介绍
  2. 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。 问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。 问第2个人,说比第一个人大两岁。 最后问第一个人,他说是10岁。请问
  3. 关于Authorware和文本格式
  4. 你知道吗,Nero也能当虚拟光驱使
  5. CSS布局 通栏平均分布型
  6. 常见浏览器扩展开发笔记(chrome firefox 360 baidu qq sougou liebao uc opera)
  7. 那英唱歌软件测试,是那英躺着唱《默》还是真唱?看到这个细节你就会知道!...
  8. 【Redis学习03】redis缓存及其更新策略
  9. 阿里云域名解析网络和服务架构设计(二) 之云解析DNS-全局流量管理
  10. ubuntu下安装摄像头