文章目录

  • 前言
  • 157准备工作
    • 配置交叉编译链
    • 编译内核
    • 编译解压glibc
  • 单片机程序
  • 应用程序
  • 驱动程序
  • 三者的关系

前言

学习资料,跟的韦东山老师的视频,大家可以上百问网下载资料
百问网。

我使用的开发板是STM32MP157,关于157的开发板资料大家也可以在百问网进行下载。

157准备工作

配置交叉编译链

将文件拷贝到虚拟机指定目录,进行解压
配置交叉编译脚本, toolchain.sh

#!/bin/bash
ARCH=arm
CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
PATH=/home/jacky/100ask_STM32MP157/Toolchain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin:$PATH

验证编译链

编译内核

拷贝到指定目录后,进行解压tar -zxvf Linux-5.4.tar.gz
配置文件在 arch/arm/configs目录下
设置配置文件:make 100ask_stm32mp157_pro_defconfig

编译uImage : make uImage LOADADDR=0xC2000040 -j4

编译设备树: make dtbs

编译内核: make modules -j4

安装内核模块到指定目录:make ARCH=arm INSTALL_MOD_PATH=/home/jacky\ /nfs_rootfs modules_install

删除链接目录,节约开发板空间: rm -rf source build
更新开发板系统
nfs挂载:mount -t nfs -o nolock,vers=3 192.168.1.100:/home/book/nfs_rootfs /mnt
拷贝uImage: cp /mnt/zImage /boot
拷贝设备树:cp /mnt/*.dtb /boot
拷贝内核: cp /mnt/lib/modules /lib -rfd

编译解压glibc

官网
将源文件拷贝到指定目录,然后进行解压
tar -xvf glibc-2.34.tar.xz

注意:如果有查看源码需求的朋友,可以直接下载到Windows上用Source insight查看即可

单片机程序

相信学过单片机的同学,对单片的最直观了解就是总是在和寄存器(硬件)打交道

在我们编写单片机程序时,无论是简单的点灯,还是后面的控制模块,控制器等,其本质依旧是对寄存器值进行设置(或配置)。因此,我们的程序总是处于一种直接操作硬件的感觉

虽然在单片机高级编程中,我们提倡将应用程序与硬件程序进行分离,即当我们实现一个按键点灯的功能时,将应用逻辑封装为 key_is_down()函数和led_on()函数,这样的目的就是提高了代码的阅读性。但是我们脱离不了要在本文件中去实现key_is_down()和led_on()两个函数,无论是通过中断的方式,还是轮询去读取对应引脚寄存器的值,或者点灯去设置寄存器的值,依旧无法脱离要去直接操作寄存器的本质。

这就是单片机程序最直观的特点。

应用程序

对于应用程序,相信大家肯定对C语言是非常熟悉的。
那么何为应用程序呢?
举个最简单的例子,读取磁盘中的文件内容,并打印出来

char buffer[1024];
int fd=open("/xxx/xxx",O_RDWR);
if(fd<0){goto failed;
}
bzero(buffer,1024);
int ret=read(fd,buffer,1023);
if(ret<0){goto failed;
}
fprintf(stdout,"%s\n",buffer);
return 0;

这是一个非常简单的应用程序,我们打开一个文件,然后读取其内容,
在这个过程中,我们只需要在意的是我们应该打开那个文件,打开以后,将读取的内容存放到我们申请的内存空间,然后进行打印,即实现了我们的应用需求,但是至始至终,我们并不知道,我们如何操作磁盘的?磁盘上的内容如何传递给我们的?似乎我们从来都无法直接去操作寄存器或硬件?

没错,这正是在操作系统上做应用程序最显著的特点之一,我们不会去关注硬件是怎么搞的,我们更在意的是我们的应用功能需求是否实现。

那么为什么不让应用程序去操作硬件呢?
原因很简单,那我们还学什么驱动。开个玩笑!
原因是为了防止一些应用程序,出现不合乎规矩的逻辑,如果直接操作硬件会导致我们的硬件损坏或工作异常。比如,当我们在实现一个启动风扇转动的功能程序时,如果我们的应用程序可以直接操作硬件,岂不是我可以让风扇先顺时针转,然后立马逆时针转。可是一旦如此操作,风扇岂不是被你玩坏了。而我们写了驱动程序后,由驱动工程师涉及好了操作该硬件的方法后,我们的应用程序必须在驱动程序限制的范围内进行操作,比如,我的驱动程序设定了,必须在风扇停下来后才能修改旋转方向,这样不就可以保证风扇的正常运转了。这也就是实现应用与驱动分离的主要原因之一,还有一个原因就是,我觉得如果没有驱动,我们的应用程序岂不是会很冗余,很庞大,大家写的应用程序都要去先配置对应硬件的寄存器,那不是烦死了

因此,Linux应用程序最显著的特点就是,我不关心硬件,不关心寄存器如何配置,不关心底层原理图,不关心那个寄存器对应的物理地址,让写驱动的大佬们去弄吧。我只关心我拿到我的数据没,但是我需要在驱动程序的限定下完成我的应用功能需求。

驱动程序

对比了上面的单片机程序和应用程序,相应大家对驱动程序其作用已经有了初步的认识。
我们继续上面的功能,打开一个文件,并读取其内容并打印在屏幕上,因此这个过程我们就涉及到了磁盘的驱动程序。驱动程序的目的就是为了给应用程序提供一个接口(API),使得应用程序通过调用系统API能够调用到我们的磁盘驱动程序对应的API程序,进而运行驱动程序,打开磁盘上的文件,将文件内容传递给应用程序,而我们驱动程序的工作就是,配置我们的磁盘控制寄存器,同时读取磁盘文件内容将数据返回给我们的应用程序

因此驱动程序 = 应用程序 + 单片机程序可以这样简单初步的理解。

三者的关系

应用程序:实现业务逻辑功能
单片机程序:设置硬件寄存器,控制硬件资源
驱动程序:作为应用程序和单片机程序的桥梁,隔离软件与硬件。让做应用的人不必太过关心硬件的配置,让硬件的控制能更好的服务于应用程序。

驱动开发(一)——(单片机程序、Linux应用程序与驱动程序分析)相关推荐

  1. Linux 网络设备驱动开发(一) —— linux内核网络分层结构

    Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计. Linux内核采用分层结构处理网络数据包.分层结构与网络协议的结构匹配,既能简化数据包处理流程,又便于扩展和维护. ...

  2. linux终端输出c语言程序,Linux终端程序用c语言实现改变输出的字的颜色

    颜色代码: 格式: echo "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo "\033[41;36m something here \033 ...

  3. 怎么用linux设计一个小程序,“Linux”小程序发布一个月后,我们发现了什么

    原标题:"Linux"小程序发布一个月后,我们发现了什么 这一个月来,这个小程序得到了八千多人的使用,一百多位贡献者实际参与了翻译贡献,其中贡献最高的"Datura st ...

  4. linux摄像头内核驱动开发,FS_S5PC100平台上Linux Camera驱动开发详解(一)

    说明: 理解摄像头驱动需要四个前提: 1)摄像头基本的工作原理和S5PC100集成的Camera控制器的工作原理 2)platform_device和platform_driver工作原理 3)Lin ...

  5. 嵌入式linux驱动开发实战教程,嵌入式Linux驱动开发实战视频教程

    嵌入式Linux驱动开发实战教程(内核驱动.看门狗技术.触摸屏.视频采集系统) 适合人群:高级 课时数量:109课时 用到技术:嵌入式 Linux 涉及项目:驱动开发.看门狗技术.触摸屏.视频采集 咨 ...

  6. linux应用程序开发数据,《嵌入式linux应用程序开发详解》核心笔记

    [linux快速入门] 自由软件(free software)中的 free 并不是指免费,而是指自由.它赋予使用者四种自由. · 自由之一:有使用软件的自由. · 自由之二:有研究该软件如何运作的自 ...

  7. linux驱动开发:触摸屏的认识(FT5x06 IC的分析)

    我们板子上的触摸屏是电容屏,当然也有电阻屏.不过目前绝大多数是电容屏. 原理:按下某个位置,得到某个位置的特定电阻/电容值,电阻屏(可能通过好几个adc去捕获这些电阻值),因为平面上一个点至少需要a( ...

  8. 嵌入式Linux USB驱动开发之教你一步步编写USB驱动程序

    2019独角兽企业重金招聘Python工程师标准>>> 编写与一个USB设备驱动程序的方法和其他总线驱动方式类似,驱动程序把驱动程序对象注册到USB子系统中,稍后再使用制造商和设备标 ...

  9. linux如何调试elf程序,Linux应用程序elf描述

    玩Linux的人应该明白ELF文件是一种文件格式,就好比.txt,.doc等一样,只是这个文件是按照特定信息排列组成,同样在windows上也存在一种格式,它叫PE,老的叫dos.下面我就来看看ELF ...

  10. linux可疑程序,linux可疑程序追踪

    今天的主角是旁边的服务器,学姐的Fedora.发生的情况和我的那台ubuntu类似.(看来是一起被黑了) 连接虽挡,进程犹在 其实昨天已经发现学姐的系统出问题了,采取的措施和我那台一样,iptable ...

最新文章

  1. 安装Anaconda创建虚拟环境以及在pycharm中使用虚拟环境
  2. MSDN Magazine推出Custom Report Item示例ProgressTracker CRI
  3. JSP关于用户安全退出的问题
  4. Vue生产环境调试的方法
  5. 一道六年级数学题,求阴影面积,那我只能用Python代码了
  6. sfc流程图怎么画_sfc第四次超级机器人大战流程图
  7. 从技术上解读大数据的应用现状和开源未来! | 技术头条
  8. 在bash中,如何检查字符串是否以某个值开头?
  9. 在苹果Mac中将 WEBP 图片转成 JPG、PNG 格式的 2 种方法
  10. Mysql5.7及以上版本的MySQL下载、安装及配置教程(附图)
  11. 事件同时发生的相对性——思想实验推导狭义相对论(三)
  12. 4、Android下实现Google街景
  13. 【数据分析与挖掘(二)】面试题汇总(附答案)
  14. python写excel宏_使用python执行excel的VBA(宏)
  15. Pytorch搭建常见分类网络模型------VGG、Googlenet、ResNet50 、MobileNetV2(4)
  16. Latex 定义definition
  17. 【C语言】求一个一元二次方程的根
  18. 自定义View,和Canvas(画布),Paint(画笔),Path(路径)的用法
  19. c语言字符串switch用法,C语言switch 语句的用法详解
  20. rbac权限管理初学

热门文章

  1. TimerTask 的使用
  2. 关注而非监视孩子的成长--Leo育儿经(1)
  3. 飞机绕地飞行一周问题
  4. kuka机器人焊接编程入门教程_【行业干货】KUKA机器人的操作与基本运动编程
  5. 计算机二级excel降水量分值,计算机二级Excel条件格式的8大用法,太全了!
  6. proxmox关闭屏幕
  7. 《转发》django如何自定义404以及404模板分享
  8. 风浪建模matlab,风浪中船舶操纵运动建模与仿真
  9. 产业观察 | 区块链与农业结合迸发新火花,助推农业现代化建设
  10. 针对未知三相电的R、S、T相,如何实现3V3A接线方式