Linux驱动学习环境搭建

背景常识

一、程序分类

程序按其运行环境分为:

        1. 裸机程序:直接运行在对应硬件上的程序

        2. 应用程序:只能运行在对应操作系统上的程序

二、计算机系统的层次结构

所有智能设备其实都是计算机,机顶盒、路由器、冰箱、洗衣机、汽车的中控……

计算机系统两种层次结构:

2.1 无操作系统的简单的两层结构

2.2 有操作系统的复杂的四层结构

安卓就是中间层、ios也是,但是说那么细致非专业人士也不懂就统称了。

鸿蒙其实更多的也是在中间层做文章。系统层修改不大。

三、 什么是操作系统

狭义的操作系统:给应用程序提供运行环境的裸机程序,也被称为操作系统内核

广义的操作系统:一组软件集合,它包含:

1. 最核心的一个裸机程序  ----------内核 (kernel)

3. app开发常用的一些功能库(如:C语言标准函数库、线程库、C++标准类库、QT类库等等)

4. 一些管理用的特殊app(如桌面、命令行、app包管理器、资源管理器、系统设置、一些常用后台服务程序)

        由于现在开源的操作系统很多,所以做一个操作系统已经没什么太大难度了,就是太大了,需要很多的人。操作系统存在的价值就是方便我们操作机器。一个新的操作系统问世没人用那就没有存在的意义了。我们国家做过很多国产操作系统但是都失败了。因为很多行业应用只能在windows上跑,他们也不愿意在别的操作系统上在开发一遍APP。不过随着Linux的普及,微软的地位可能会收到冲击。鸿蒙开发出来也面临推广问题,怎么让程序员愿意接纳鸿蒙,在鸿蒙上开发好的APP。intel和三星合作开发过一个操作系统但是也卡在了推广,两家这么强的公司也没把他推起来。安卓会火就是因为他代替了一个操作系统叫做塞班。程序员们为塞班提了很多改进意见。但是他没改。这时候正好安卓出了程序安装卸载功能并且用java能开发。市场上的Java程序员还多就火起来了。

四、操作系统内核的实现模式

内核:操作系统最核心的那个裸机程序,主要负责硬件资源的驱动和管理。

一个操作系统内核主要包括如下几个子模块:

1. 任务管理:多任务支持、任务调度、任务间通讯

2. 内存管理:物理内存管理,虚拟内存实现(出现段错误不影响系统运行)

3. 设备驱动:各种外部设备的I/O支持

4. 网络协议支持

5. 文件系统支持

6. 启动管理

两种典型的内核实现模式:

1. 单内核(宏内核):所有子模块代码编译到一个比较大的可执行文件(镜像文件)中,各子模块代码共用同一套运行资源,各模块间的交互直接通过函数调用来进行

(3、4、5在微内核中被做成了服务进程,APP和内核之间使用进程间通信来调用这些服务。

在宏内核中函数是通用的直接用函数就行。新增加功能时微内核直接加个模块就行。但是宏内核需要重新编译内核。这样太麻烦了所以宏内核加了一个机制提高扩展性。)

2. 微内核:只将任务管理、内存管理、启动管理最基本的三个子模块编译到一个微型的可执行文件中,其它子模块则各自编译成独立的后台服务程序,这些服务程序与微型内核以及app间主要通过各种IPC进行通讯

单内核特点:效率高,稳定性低,扩展性差,安全性高,典型操作系统:UNIX系列、Linux

微内核特点:效率低,稳定性高,扩展性高,安全性低,典型操作系统:Windows,QNX

五、什么是设备驱动程序

英文:Device Driver

简称:驱动(Driver)

一种添加到操作系统中的特殊程序,主要作用是协助操作系统完成应用程序与对应硬件设备之间数据传送的功能

简言之,设备驱动程序就是操作系统中“驱动”对应硬件设备使之能正常工作的代码。

一个驱动程序主要完成如下工作:

1. 初始化设备,让设备做好开始工作的准备

2. 读数据:将设备产生的数据传递给上层应用程序

3. 写数据:将上层应用程序交付过来的数据传递给设备

4. 获取设备信息:协助上层应用程序获取设备的属性、状态信息

5. 设置设备信息:让上层应用程序可以决定设备的一些工作属性、模式

6. 其它相关操作:如休眠、唤醒、关闭设备等

其中最核心的工作就是设备数据的输入和输出,因此计算机外部设备(外设)也被称为IO设备

向下驱动外设向上提供接口

学习方法

 一、为什么要学驱动开发

1. 理想原因:兴趣、成就感

2. 现实原因:高薪

看看华为、大疆、还有汽车企业的薪资十分诱人。

二、学习Linux驱动开发的前提条件

1. 精通C语言

2. 能看懂硬件原理图

3. 阅读芯片手册不怵头

(很多芯片手册都是英文的。暂时没遇到过中文的。)

4. 有Linux操作系统的一些背景知识,比如说

   a. Linux常用命令的使用

   b. Linux常用系统调用函数的编程,尤其是IO相关函数

三、怎么学?

1. 学习任何方面编程的共同准则--------用代码来检验所学

2. 从简易入手,逐步深入,切忌太强的好奇心

3. 重点花在掌握原则、总结套路,知识点、相关函数不要死记硬背

4. 会搜善套(网络、笔记、芯片手册)

(需要大量时间来时间,光看视频查资料没用。)

(开发环境和前面系统移植需要的一样,详情可参考我前面的博客)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要搭建Linux驱动开发环境,需要以下步骤: 1. 安装Linux操作系统,建议选择Ubuntu或CentOS等常用的发行版。 2. 安装必要的开发工具,如gcc、make、git等。 3. 下载并安装Linux内核源代码,可以从官网或GitHub等渠道获取。 4. 编写驱动程序代码,可以使用C语言或其他支持的编程语言。 5. 编译驱动程序,生成可执行的模块文件。 6. 加载驱动程序,使用insmod命令将模块文件加载到内核中。 7. 测试驱动程序,验证其功能是否正常。 需要注意的是,Linux驱动开发需要一定的编程基础和操作系统知识,建议先学习相关的基础知识再进行实践。 ### 回答2: Linux是一种开放源代码的操作系统,其驱动开发环境搭建需要掌握Linux系统及编程知识。 1. 安装Linux系统 要进行Linux驱动开发,首先需要安装Linux系统。可以从官网下载最新版本的Linux发行版,并按照官方文档进行安装。 2. 安装开发环境 Linux驱动开发需要一些开发环境,例如GCC编译器、GNU Make等。可以通过以下命令安装: sudo apt-get update sudo apt-get install build-essential 3. 安装内核源码 Linux驱动程序需要访问Linux内核源码有关信息,因此需要安装内核源码。可以通过以下命令安装: sudo apt-get install linux-source 安装完成后,需要解压源码文件,并将其链接到/usr/src/linux目录: cd /usr/src sudo tar -xjf linux-source-*.tar.bz2 sudo ln -s linux-source-* linux 4. 编译驱动程序 编写Linux驱动程序需要了解Linux内核的结构和API,以及掌握C语言编程技巧。编写完毕后,可以通过以下命令进行编译: make 编译后会得到一个.ko文件,即驱动程序的二进制文件。 5. 安装驱动程序 可以通过以下命令将驱动程序安装到Linux系统中: sudo insmod driver.ko 如果需要在系统启动时自动加载驱动程序,可以将其加入/etc/modules文件中。 总之,Linux驱动开发需要掌握Linux系统和C语言的知识,并安装必要的开发环境和内核源码,才能进行编译测试和调试。在开始开发前,一定要仔细阅读Linux内核文档和相关资料,加深对Linux驱动开发的理解。 ### 回答3: Linux驱动开发环境搭建Linux设备驱动程序编写工作的基础,实现这项工作需要进行以下步骤。 第一步:安装适当的Linux应用程序。 要开始Linux驱动程序开发,需要一个Linux系统和一些应用程序。安装一个流行的Linux发行版,如Ubuntu,Debian,Redhead或CentOS,随后在终端执行以下命令以确保系统有最新的补丁和应用程序: sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential libncurses-dev flex bison libssl-dev libelf-dev 第二步:安装合适的编辑器。 Linux驱动程序的开发需要一个合适的编辑器,它可以支持高亮显示,自动缩进和自动代码注释。Vim,Emacs,Kate和Gedit都是常用的Linux编译器。在我们的建议中,Vim是最好的。 sudo apt-get install vim 第三步:下载Linux内核源码。 因为Linux驱动程序的编写是基于Linux内核,因此首先需要下载Linux内核源代码。你可以手动下载源代码或直接运行以下命令: sudo apt-get install linux-source sudo tar -xvf linux-source-xxx.tar.xz 第四步:为你的驱动开发配置构建环境。 要开始构建你的驱动程序,需要一个Makefile文件,它支持指定源文件和对象文件,并生成最终的二进制文件。Makefile就像一个脚本,告诉系统如何构建Linux驱动程序。 第五步:编写该驱动程序。 最后一步是编写设备驱动程序。你可以选择C或C++编写设备驱动程序。要开始编写设备驱动程序,请建立一个新的文件,并在其中包含所需的头文件,实现所需的函数并编译代码。在重新启动系统之前,您必须在内核中加载并启动设备驱动程序。 总体而言,当您按照上述步骤完成您的任务时,您将获得一个开发环境,可以用于编写、调试、构建和部署Linux设备驱动程序。这些步骤需要一些时间和努力,但最终,您将在Linux系统中成功地开发驱动程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇努力学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值