野火Linux学习笔记
文章平均质量分 68
使用野火eMMC Pro开发板的学习笔记,我会将学到的东西记录下来,以免自己忘记,也为其他人提供参考
꧁༺夜༒雨༻꧂
消失一段时间,去提升!
展开
-
第五十七讲 GPIO子系统
gpio 子系统实验原创 2022-11-10 00:43:52 · 1019 阅读 · 0 评论 -
第五十六讲 pinctrl子系统
pinctrl 子系统实验原创 2022-10-18 00:39:43 · 958 阅读 · 0 评论 -
第五十五讲 插件设备树
overlay 实验原创 2022-10-11 01:10:50 · 1688 阅读 · 0 评论 -
第五十四讲 设备树实现RGB驱动
第五十四讲 设备树实现RGB驱动文章目录第五十四讲 设备树实现RGB驱动一、基础知识1、GPIO Write Mode2、硬件连接3、重要寄存器(参考IMXULL用户手册)RGB_RRGB_G(GPIO4_IO20)RGB_B(GPIO4_IO19)二、RGB设备树实验1、更改设备树文件2、rgb驱动rgb_led.crgb_led.hMakefile3、实验步骤四、总结一、基础知识1、GPIO Write Mode以下摘抄自官方数据手册(用户手册),前面提到过。The programming s原创 2022-03-19 13:35:58 · 1335 阅读 · 0 评论 -
第五十讲 自定义总线(xbus)
第五十讲 自定义总线(xbus)文章目录第五十讲 自定义总线(xbus)一、概述二、重要函数1、buses_init2、bus_register3、device_register4、driver_register三、xbus实验1、代码2、实验步骤一、概述前面的几个驱动代码软件和硬件都是夹杂在一起的,这样就会使得驱动的复用性比较低。Bus是链接处理器和其他设备之间的通道。内核规定,系统中的每个设备都要连接在一个Bus上,这个Bus可以是一个内部Bus、虚拟Bus或者Platform Bus。前面的驱动原创 2022-03-16 22:42:39 · 2958 阅读 · 0 评论 -
第五十三讲 获取设备树属性
第五十三讲 获取设备树属性文章目录第五十三讲 获取设备树属性一、获取设备树属性信息1、查看属性所在节点device_node 结构体2、如何查找结点节点路径节点类型(不推荐使用)节点名字(不推荐使用)节点属性3、查找节点属性值property 结构体4、如何查找节点属性值of_find_propertyof_property_read_u32of_property_read_u32_arrayof_property_read_string二、设备树属性获取实验1、实验代码getDTSproperty.cM原创 2022-03-16 22:41:38 · 2132 阅读 · 1 评论 -
第五十二讲 DTS(设备树)
第五十二讲 DTS(设备树)一、简介随着硬件设备的种类逐年递增,板级platform平台设备文件越来越多。在过去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾。官方对设备树的描述是,一种描述硬件资源的数据结构。它通过bootloader将硬件资源传给内核,使得内核和硬件资源描述相对独立。设备树的主要优势:对于同一SOC的不同主板,只需更换设备树文件.dtb即可实现不原创 2022-03-08 22:07:11 · 3261 阅读 · 4 评论 -
第五十一讲 platform
第五十一讲 platform文章目录第五十一讲 platform一、前言二、函数说明1、platform_bus_init2、platform_device_register3、platform_driver_register4、platform_get_resource三、platform实验1、实验代码dev.cdrv.cgpio.hMakefile2、实验步骤四、其他一、前言说几句题外话,因为是跟着视频再看,前面的东西我也是懵懵懂懂。随着后面的一些学习,其实前面差不多就是后面的一些基础。kset原创 2022-03-08 22:05:30 · 1774 阅读 · 0 评论 -
第四十九讲 class
第四十九讲 class文章目录第四十九讲 class一、class 讲解1、功能2、创建流程3、创建函数二、class实验1、实验代码2、Makefile3、实验步骤一、class 讲解1、功能硬件设备分类管理与udev协作,自动创建设备文件2、创建流程系统启动classes_init():在/sys目录下创建class文件class_create在class目录下新创建其他子目录device_create在class_create创建的目录项下面创建新的目录项在新创建原创 2022-01-05 21:17:17 · 255 阅读 · 2 评论 -
第四十八讲 uevent
第四十八讲 uevent文章目录第四十八讲 uevent一、uevent二、uevent实验1、代码2、Makefile3、实验步骤一、ueventkobject 可以通过 uevent往用户空间发送消息kobject_uevent内核发送消息接口(以广播的形式发送)NETLINK特殊的网络通信,本地主机使用传统的内核发送消息是通过内核执行 hotplug 程序进行消息通知udev/mdev用户空间守护进程,监听广播消息在开发板使用的是udev守护进程,没有使用mdev默原创 2022-01-04 20:25:11 · 195 阅读 · 0 评论 -
第四十八讲 uevent
第四十八讲 uevent文章目录第四十八讲 uevent一、uevent二、uevent实验1、代码2、Makefile3、实验步骤一、ueventkobject 可以通过 uevent往用户空间发送消息kobject_uevent内核发送消息接口(以广播的形式发送)NETLINK特殊的网络通信,本地主机使用传统的内核发送消息是通过内核执行 hotplug 程序进行消息通知udev/mdev用户空间守护进程,监听广播消息在开发板使用的是udev守护进程,没有使用mdev默原创 2022-01-04 19:00:08 · 944 阅读 · 0 评论 -
第四十七讲 kset
第四十七讲 kset文章目录第四十七讲 kset一、重要函数二、kset实验1、代码2、Makefile3、实验步骤一、重要函数kset_create_and_add负责产生一个kset对象并将其与sysfs关联起来kset_create为kset内部的kobject设置名字(kobject_set_name)为kset成员变量设置初始值kset_register将kset与sysfs绑定,并将添加kset消息通知到用户空间kset_init初始化kset里面的kobj原创 2022-01-04 18:59:30 · 460 阅读 · 0 评论 -
第四十六讲 设备驱动kobject
第四十六讲 设备驱动文章目录第四十六讲 设备驱动一、sysfs1、发展2、sysfs简介3、kobject4、kobj_type二、设备驱动实验1、代码2、Makefile3、实验步骤一、sysfs1、发展早期内核(2.4版本之前)没有统一的设备驱动模型2.4-2.6版本期间使用devfs,挂载在/dev目录下2.6版本之后引入sysfs,挂载在/sys目录将设备进行分类、分层,统一进行管理配合udev/mdev守护进程动态创建设备文件,命令规则自由制定2、sysfs简介原创 2021-12-28 23:49:47 · 705 阅读 · 2 评论 -
第四十五讲 字符设备
第四十五讲 字符设备文章目录第四十五讲 字符设备一、原理1、将字符设备抽象成文件二、设备号的组成与哈希表1、设备号头文件2、查看已注册设备号3、哈希表三、设备号管理1、设备结构体2、__register_chrdev_region 函数四、file_operation 接口1、字符设备管理对象2、哈希表probes五、led 设备驱动实验1、步骤2、实验代码3、makefile4、实验步骤六、总结一、原理1、将字符设备抽象成文件基本接口的实现查原理图、数据手册等,确定底层需要配置的寄存器实现原创 2021-12-23 22:31:18 · 823 阅读 · 0 评论 -
第四十四讲 第二个内核模块
第四十三讲 第二个内核模块文章目录第四十三讲 第二个内核模块一、带参数的内核模块二、代码1、实验步骤一、带参数的内核模块module_param(name, type, perm)作用:内核模块则可通过module_param()来传递命令行参数参数:name:表示参数的名字; type:表示参数的类型; perm:表示参数的访问权限;EXPORT_SYMBOL作用:XPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使原创 2021-12-20 00:24:55 · 146 阅读 · 0 评论 -
第四十三讲 写一个内核模块
第四十三讲 写一个内核模块文章目录第四十三讲 写一个内核模块一、基础知识1、头文件2、打印信息二、准备工作三、编译内核源码三、内核模块实验四、感想一、基础知识1、头文件头文件说明linux/module.h包含内核模块信息声明的相关函数linux/init.h包含了 module_init() 和 module_exit() 函数声明linux/kernel.h包含内核提供的各种函数2、打印信息前面编写程序都是使用 printf 进行打印消息的,但是在内原创 2021-12-18 16:00:29 · 628 阅读 · 0 评论 -
第四十二讲 内核模块
第四十二讲 内核模块文章目录第四十二讲 内核模块一、功能二、内核模块加载以及卸载1、insmod2、rmmod三、模块初始化以及退出函数1、模块初始化四、内核模块其他函数看到这里你可能会奇怪,接下来不应该是裸机吗?是的,确实是裸机,但是这部分我就没打算写了。我学这个教程主要也不是为了学习裸机的,所以这部分我都是快速浏览的。并没有花时间去记录我的学习过程。如果你有单片机的基础,相信你也能看懂。我跳过是因为我做的就是单片机,如果你没有这方面的一些知识,还是建议您不要像我这样跳呀。一、功能内核模块是解原创 2021-12-18 15:58:09 · 322 阅读 · 2 评论 -
第四十一讲 常用汇编指令
第四十一讲 ARM常用汇编指令文章目录第四十一讲 ARM常用汇编指令一、汇编格式1、格式2、格式介绍二、常用段名三、常见操作1、定义全局标号2、字节对齐四、常用汇编指令写在前面:看到这里你也许会疑惑,前面还有几讲呢?是的,前面几讲我并没有打算写。没有写的原因并不是它不重要,也不是我懒。仅仅是因为我对前面的理解也还不够深刻。我现在只能知道表面的一些东西,怕这样会误导大家。所以我从后面实践开始。我回去慢慢探索,慢慢理解。毕竟实践出真知嘛。好了,废话就到这里了,接下来进入正题。一、汇编格式1、格式l原创 2021-12-09 20:10:05 · 353 阅读 · 0 评论 -
第四十讲 system-v
第四十章 system-v文章目录第四十章 system-v一、system-v 消息队列1、system-v ipc特点2、消息队列用法3、常用函数4、示例5、效果二、system-v 信号量1、介绍2、信号量的用法3、常用函数4、示例5、现象三、system-v 共享内存1、介绍2、共享内存的用法3、常用函数4、示例5、现象一、system-v 消息队列1、system-v ipc特点独立于进程没有文件名和描述符IPC 对象具有 key 和 ID2、消息队列用法定义一个唯一的key原创 2021-12-07 22:55:30 · 1074 阅读 · 0 评论 -
第三十九讲 信号
第三十九讲 信号文章目录第三十九讲 信号一、信号简介1、基本概念2、信号的产生硬件软件3、信号的处理方式二、常用信号三、信号函数1、signal 函数示例实验现象2、kill 函数示例实现现象3、raise 函数示例现象四、信号集处理函数1、屏蔽信号集概念方法2、未处理信号集3、信号集api4、示例5、现象一、信号简介1、基本概念在 Linux 系统(以及其他类 Unix 操作系统)中,信号被用于进程间的通信。信号是一个发送到某个进程或同一进程中的特定线程的异步通知,用于通知发生的一个事件。可以通原创 2021-11-30 00:32:31 · 268 阅读 · 2 评论 -
第三十八讲 管道
第三十八讲 管道文章目录第三十八讲 管道一、无名管道(pipe)1、函数介绍2、特点3、使用步骤4、使用示例二、有名管道1、函数介绍2、特点3、使用步骤4、示例读取代码写入代码小提示一、无名管道(pipe)1、函数介绍函数名称函数功能头文件返回值int pipe(int pipefd[2])创建无名管道unistd.h成功:0失败:-12、特点特殊文件,前面说过在 linux 下一切皆文件。而无名管道是一个没有名字的文件,无法使用 open 函数进行操作,但是原创 2021-11-28 23:49:20 · 913 阅读 · 0 评论 -
第三十七讲 进程间通信(ipc)
第三十七讲 进程间通信(ipc)文章目录第三十七讲 进程间通信(ipc)一、进程间通信作用本节讲的比较粗糙,仅仅只是一些概念。而且概念也不是很全,了解一下即可。后面学到了需要更新这里。一、进程间通信作用数据传输资源共享时间通知进程控制二、ipc机制在其 unix 系统 ipc管道(数据传输)信号(事件通知)fifo(数据传输)system-v ipc(是 unix 系统的一个主分支,是贝尔早期在 unix 系统版本上不断优化得来的)system-v 消息队列(数据传输原创 2021-11-28 23:46:41 · 1229 阅读 · 0 评论 -
第三十六讲 守护进程
第三十六讲 守护进程文章目录第三十六讲 守护进程一、守护进程二、编写一个守护进程1、步骤2、代码3、将普通代码伪装成守护进程1、方法2、语法格式3、示例一、守护进程在前面一讲我们知道会话用来管理前后台进程组。会话一般有直接关联着一个终端。此时当我们退出终端之后,现在所使用的会话也会被关闭,会话所管理的前后台进程也随之会被关闭。守护进程是不受终端影响的,当终端退出后,进程也不会被影响二、编写一个守护进程1、步骤创建一个子进程,父进程直接退出方法:通过 fork 函数创建如果父进程不退出,原创 2021-11-28 23:46:04 · 814 阅读 · 0 评论 -
第三十五讲 进程组、会话、终端
第三十五讲 进程组、会话、终端文章目录第三十五讲 进程组、会话、终端一、进程组1、作用2、进程组的诞生3、进程组id4、进程组分类(1)、前台进程组(2)、后台进程组(3)、前后台进程切换二、会话1、作用2、会话的诞生3、会话id三、终端1、物理终端2、伪终端3、虚拟终端一、进程组1、作用对相同类型的进程进行管理2、进程组的诞生在 shell 直接执行应用程序,可以创建进程组。对于大部分进程来说,自己就是进程组的首进程。进程组只有一个进程如果进程调用了 fork 函数,那么父子进程同属一个进程原创 2021-11-28 23:45:07 · 763 阅读 · 0 评论 -
第三十四讲 子进程的终结
第三十四讲 子进程的终结文章目录第三十四讲 子进程的终结一、 wait 函数1、函数简介2、例程3、实验现象一、 wait 函数1、函数简介函数函数原型返回值作用头文件参数waitpid_t wait(int *status)成功:退出子进程的pid失败:-1获取子进程退出状态sys/wait.h记录子进程返回值处理子进程退出状态值的宏:WIFEXITED(status) :如果子进程正常退出,则该宏为真WEXITSTATUS(status):如果子进原创 2021-11-10 21:32:15 · 111 阅读 · 0 评论 -
第三十三讲 进程的退出
第三十三讲 进程的退出文章目录第三十三讲 进程的退出一、退出的方式二、进程退出函数1、函数表2、介绍三、进程退出实验1、代码2、现象一、退出的方式return 退出调用 exit 函数退出调用 _exit 函数退出二、进程退出函数1、函数表函数说明返回值头文件exit退出进程无unistd.h|stdlib.h_exit退出进程无unistd.h|stdlib.h2、介绍二者都是用于终止一个程序在调用 exit 和 _exit 后会将原创 2021-10-16 00:14:21 · 125 阅读 · 0 评论 -
第三十二讲 exec 函数族
第三十二讲 exec 函数族文章目录第三十二讲 exec 函数族一、exec 函数族二、exec 族函数实验1、execl 函数实验代码实验现象2、execlp 函数实验代码实验现象3、execv实验代码实验现象4、execve实验代码实验现象三、注意事项一、exec 函数族函数原型返回值头文件execlint execl(const char *path, const char *arg, …)成功:不返回失败:返回-1#include <unistd.h>原创 2021-10-15 00:29:13 · 134 阅读 · 0 评论 -
第三十一讲 进程
第三十一讲 进程文章目录第三十一讲 进程一、进程二,创建一个进程1、函数介绍2、fork 函数特性三、fork 实验1、实验代码2、实验结果操作系统是通过进程来实现对应用程序的协调运行一、进程在单片机开发中,是没有进程的概念的。因为单片机内就运行了一个程序。但是在 Windows 或者 Linux 里面可以运行多个程序,这些程序需要进行统一的管理。操作系统通过对进程的管理来对不同程序进行管理。获取进程之间的关系:pstree操作系统通过 pid 来区分不同的进程。通过命令 ps -ef 可以原创 2021-10-12 23:53:45 · 154 阅读 · 3 评论 -
第三十讲 检测按键输入
第三十讲 检测按键输入文章目录第三十讲 检测按键输入一、 按键输入实验1、设备节点文件路径2、input 子系统3、input_event 结构体原型参数说明二、实验代码一、 按键输入实验1、设备节点文件路径/dev/input/by-path/platform-gpio-keys-event2、input 子系统input 子系统的功能非常强大,它可以用在多种输入设备上面。例如:按键、键盘、鼠标、触摸屏等等。input 子系统是将一系列的输入设备都抽象出来了,并不是针对某一设备。3、inp原创 2021-09-30 22:22:57 · 468 阅读 · 0 评论 -
第二十九讲 蜂鸣器
第二十九讲 蜂鸣器文章目录第二十九讲 蜂鸣器一、 蜂鸣器实验1、 led 子系统与 gpio 子系统区别2、导出方法3、使用命令导出 gpio二、使用命令控制蜂鸣器三、代码实现控制蜂鸣器前面一讲使用的是驱动程序的 led 子系统,本讲则是使用的 gpio 子系统。两者是有区别的。一、 蜂鸣器实验1、 led 子系统与 gpio 子系统区别led 子系统已将帮我们把硬件操作接口导出到用户空间了gpio 子系统没有将控制 gpio 的操作接口导入到用户空间,需要我们自己导入控制蜂鸣器原创 2021-09-29 22:42:04 · 562 阅读 · 0 评论 -
第二十八讲 IO 函数
第二十八讲 IO 函数文章目录第二十八讲 IO 函数一、 文件描述符和打开模式1、常见文件操作函数2、文件打开模式二、 标准 io 函数1、 常见的标准io函数2、文件io五大模式三、控制 led 设备1、驱动程序本质步骤四、实验代码(驱动红色led小灯)五、 其他本讲是联合几讲的内容,因为前面每一期内容都很少,所以结合起来了本章会有一些扩展的知识,可能会有写偏差,但是会更详细一些,是参考了网上大佬们的理解。很感谢大佬们。参考链接一、 文件描述符和打开模式1、常见文件操作函数函数原创 2021-09-28 23:52:27 · 495 阅读 · 2 评论 -
第二十七讲 一切皆文件
第二十七讲 一切皆文件文章目录第二十七讲 一切皆文件一、虚拟文件系统二、文件描述符和打开模式io 编程系统 io 编程标准 io 编程一般在操作系统里面支持用户使用各种各样的文件系统和硬件设备。但是在 Linux 系统来说,linux 内核屏蔽了硬件的区别,将所有硬件设备都抽象成文件来给用户使用。本讲包括虚拟文件系统和 io一、虚拟文件系统Linux 里面不仅支持许多普通文件,例如 :ext4、fat32、ubifs等,还支持特殊文件系统,例如:进程文件系统、设备文件系统。这些文件系统格式原创 2021-08-31 00:28:57 · 196 阅读 · 0 评论 -
第二十六讲 C语言面向对象基础
第二十六讲 C语言面向对象基础文章目录第二十六讲 C语言面向对象基础一、 面向过程开发方式二、 面向对象开发方式一、 面向过程开发方式把问题分解成一系列步骤在函数中实现各个步骤根据需求调用函数二、 面向对象开发方式将构成问题的事务分解成各个对象调用对象的方法属性解决问题面向对象的特性封装性:封装内部的细节,留出接口供调用继承:复用现有代码多态:虚函数、函数重载、运算符重载在 c 语言中一般通过函数指针,将函数指针赋予不同的值实现多态。...原创 2021-08-30 23:39:08 · 95 阅读 · 0 评论 -
第二十五讲 Makefile 简介
第二十五讲 Makefile 简介文章目录第二十五讲 Makefile 简介一、 makefile 简介二、 makefile 需要学到什么程度三、怎么学习 makefile一、 makefile 简介在前面我们编译都是通过命令 gcc -o 输出文件名 源文件 这样的方式去编译文件,但是随着我们慢慢的深入学习,源文件可能会越来越多,一直敲命令编译文件的话会很麻烦,而且降低了我们的工作效率。那么问题来了,有方法可以解决频繁去敲多个代码编译的问题吗?当然是可以的,我们可以通过 make 工具,简化我们原创 2021-08-30 20:11:08 · 105 阅读 · 0 评论 -
第二十四讲 GCC编译器
第二十四讲 GCC编译器文章目录第二十四讲 GCC编译器一、 GCC 编译选项二、文件后缀名与编译器的默认动作对应表本讲更偏向一些基础的知识,可以了解了解。一、 GCC 编译选项前面已经讲过一些编译选项了,这里相当于嘴一个总结。也方便自己忘了将来直接查找这篇文章即可找到解决方案。对于一个 C 程序,从源代码到可执行程序经过了 预编译-》编译)-》汇编-》链接四个阶段。选项作用说明-c预处理、编译和汇编源文件,但是不链接编译器更具源文件生成 obj文件。默认情况下,g原创 2021-08-27 23:17:20 · 196 阅读 · 0 评论 -
第二十三讲 ARM-GCC 与交叉编译
第二十三讲 ARM-GCC 与交叉编译文章目录第二十三讲 ARM-GCC 与交叉编译一、 交叉编译二、ARM-GCC三、 安装 ARM-GCC一、 交叉编译前面讲到的 hello 例子,在 Ubuntu 下进行编译,编译完成之后的可执行文件在 Ubuntu 环境下运行,这个叫做本地编译。即在当前平台编译,编译得到的程序也在本地执行。嵌入式系统中的编译过程与本地编译却有不同。在一种平台上编译,并能够运行在另一种体系架构不同的平台上,这种称为交叉编译。在 x86 处理器平台上编译能够运行在 ARM 架构原创 2021-08-27 22:17:48 · 1268 阅读 · 0 评论 -
第二十二讲 gcc 与 helloworld
第二十二讲 gcc 与 helloworld文章目录第二十二讲 gcc 与 helloworld一、gcc 编译工具1、 简介2、gcc 编译工具链gcc 编译器binutils 工具集glibc补充二、运行第一个 helloworld 程序题外话:哈哈哈,前面学了好久了,总算快进入正题了。希望自己可以不要偷懒,一鼓作气学下去。前面就偷懒了。加油!!!一、gcc 编译工具1、 简介GCC是以GPL许可证所发行的自由软件,也是GNU计划的关键部分。GCC的初衷是为GNU操作系统专门编写一款编原创 2021-08-27 00:44:01 · 444 阅读 · 0 评论 -
第二十一讲 安装 NFS 服务器
第二十一讲 安装 NFS 服务器文章目录第二十一讲 安装 NFS 服务器一、Ubuntu 安装 NFS 服务器二、 开发板安装 nfs 客户端三、 、验证 nfs 挂载网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。百度百科一、Ubuntu 安装 NFS 服务器打开 Ubuntu进入终端安装 nfs 服务原创 2021-08-26 22:01:11 · 215 阅读 · 0 评论 -
第二十讲 git 简介和项目资料获取
第二十讲 git 简介和项目资料获取文章目录第二十讲 git 简介和项目资料获取一、git 简介git 简介安装 git二、项目资料下载野火远程仓库git 学习资料注意一、git 简介git 简介Git 是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小到大的所有项目。Git易于学习, 占用空间小,性能快如闪电。它超越了 SCM 工具,如 Subversion、CVS、Perforce 和 ClearCase,具有廉价的本地分支、方便的暂存区和 多个工作流等功能。– 摘自git原创 2021-08-22 14:53:58 · 300 阅读 · 0 评论 -
第十九讲 使用脚本体验硬件
第十九讲 使用脚本体验硬件文章目录第十九讲 使用脚本体验硬件一、前期准备二、安装脚本软件三、使用 peripheral四、使用脚本固件版本:imx6ull-lubancat-carp-qt-armhf-2021-06-08.img.xz开发板:pro一、前期准备打开串口终端软件并连接开发板串口将开发板进行开机登陆账户检查网络连接这里我的网络是直接使用的网口连接的,连接方法很简单,将有网的网线连接在开发板的网口即可,也可以使用前面教程的 wifi 连接查看网络是否原创 2021-08-22 13:44:01 · 253 阅读 · 0 评论