首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 驱动开发 gpio系统 快速入门

gpio 和 pinctrl 子系统内核使用率非常高,和嵌入式产品关联非常大。从这两个子系统开始学习驱动开发是个不错入门选择。...本文目录: 一、gpio 与 pinctrl 二、内核里如何引用 gpio 三、gpio系统框架 四、应用层如何访问 gpio 一、gpio 与 pinctrl 本文主要关注 gpio系统,但是老吴认为必要先说明一下...子系统,用 struct gpio_desc 来描述一个 gpio 引脚,gpiod_xxx() 都是围绕着 strcut gpio_desc 进行操作。...在 gpio系统,SoC 上每一个 gpio bank 都会被认为是一个 gpio controller,每一个 gpio controller 都由一个 struct gpio_chip 来描述.../dev/gpiochipX 直接操作字符设备是比较低效率内核里提供了一些 demo: $ cd linux-4_19/tools/gpio $ ls Makefile gpio-event-mon.c

4.8K33

Linux系统内核升级

/releases.html Linux kernel版本状态说明 mainline mainline指由Linus Torvalds亲自制作内核发布版,是官方当前最新版本kernel source...Prepatch Prepatch 或 “RC” 内核是主要内核预发行版本,主要针对内核开发人员和 Linux 爱好者。必须从源代码进行编译,并且通常包含必须在可以放入稳定版本之前进行测试新功能。...,开启文本界面的编译选项菜单窗口,可以对内核加载模块编译选项进行调整,如修改编译后内核名称、新添加之前系统缺少模块等。...(*号则是以静态方式编译打包进内核文件,如果新添加模块较多,会导致内核文件体积增大) 新添加cgroup模块RDMA General setup ——> Control Group support...0 #0表示 /boot/grub2/grub.cfg 文件中排在第一位 menuentry 段 # 重启系统 [root@boy ~]# reboot # 查看重启后内核版本 [root@boy

3.6K30
您找到你想要的搜索结果了吗?
是的
没有找到

Linux 内核系统架构

这篇文章从进程调度,内存管理,设备驱动,文件系统,网络等方面讲解Linux内核系统架构。...Linux系统架构是一个经典设计,它优秀分层和模块化,融合了数量繁多设备和不同物理架构,让世界各地内核开发者能够高效并行工作。先来看看Linus在多年前公开Linux邮件。...Linux系统架构图 架构非常清晰,从硬件层,硬件抽象层,内核基础模块(进程调度,内存管理,网络协议栈等)到应用层,这个基本上也是各类软硬件结合系统架构基础设计,例如物联网系统(从单片机,MCU等小型嵌入式系统...在早期Linux操作系统,主要采用是时间片轮转算法(Round-Robin),内核在就绪进程队列中选择高优先级进程运行,每次运行相等时间。...TASK_SIZE可以配置,Linux系统默认配置3:1,应用程序使用3GB空间,内核使用1GB空间,这个划分并不依赖实际RAM大小。

5K72

Linux系统内核笔记

,它指的是系统内核,凡是使用这种内核操作系统都叫作 Linux系统(发行板),严格意义上讲Linux指的是内核,隶属于GNU工程。...UNIX系统、免费开源,而Linux之父就是在参照这款操作 ,才写出第一个版本Linux内核代码 GNU工程:是自由软件基金会所创立一个开源组织,基本原则就是共享,主旨是发展出 一个有别于商业UNIX...… UNIX/Linux系统调用都封装成了C函数形式,但它们并不是标准C一部分 标准库函数绝大部分时间都工作在用户态,但部分时间也需要切换到内核 (进行了系统调用),比如:fread/fwrite.../malloc/free 我们自己所编写代码也可以直接调用系统接口进入内核态(进行系统调用), 比如:brk/sbrk/mmap/munmap 系统调用功能代码存在于内存,接口定义在C库,...因为标准IO使用了缓冲技术,当数据写入时并没有立即把数据交给内核,而是先放 在缓冲区,当缓冲区满时,会一次性把缓冲区数据交给内核写到文件,这样就 减少内核态和用户态切换次数,而系统IO每写一次数据就要进入一次内核

1.5K20

Linuxgpio接口使用方法示例

前言 Linux内核gpio是最简单,最常用资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应接口使用gpiogpio使用0~MAX_INT之间整数标识,...不能使用负数,gpio与硬件体系密切相关,不过linux有一个框架处理gpio,能够使用统一接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用 使用gpio...使用gpio接口需要包含#include ,在驱动中使用延时函数mdelay,需要包含#include 文件,Documentation/gpio.txt...); } else { set_irq_type(gpio_to_irq(sw->gpio), IRQ_TYPE_EDGE_RISING); } } 参考文章 Linuxgpio口使用方法...总结 以上就是这篇文章全部内容了,希望本文内容对大家学习或者工作具有一定参考学习价值,如果有疑问大家可以留言交流,谢谢大家对ZaLou.Cn支持。

2.5K53

Linux 内核】编译 Linux 内核 ⑦ ( 安装内核模块 | 安装内核 | 重启系统 | 查看当前内核版本 )

文章目录 一、安装内核模块 二、安装内核 三、重启系统 四、查看当前内核版本 一、安装内核模块 ---- 确保 Linux 内核编译完成 , 没有任何报错之后 ; 参考 【Linux 内核】编译 Linux...内核 ⑥ ( 安装 OpenSSL | 安装其它依赖库 | 内核编译完成 ) 博客 ; 进入 Linux 内核源码根目录 , 执行 sudo make modules_install 命令 , 安装编译好内核模块...; 下面的内核安装过程会持续很长时间 ; 内核安装过程 : root@ubuntu:~# cd kernel/linux-5.6.14 root@ubuntu:~/kernel/linux-5.6.14...-5.6.14# 三、重启系统 ---- 执行 reboot 命令 , 重启 Ubuntu 操作系统 ; 四、查看当前内核版本 ---- 重启之后 , 在命令行终端执行 uname -a 命令 ,...查看当前内核版本 , 发现当前内核版本已经

15.4K50

Linux系统手动更换内核

至于linux内核什么时候开始原生支持,网上说法真的是五花八门,很多人文章感觉就是互相抄,连2.6.* 说法都能蹦出来(我怀疑是一些采集站)。...https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm 安装新内核啦 查看ELRepo仓库下,在当前系统支持内核包 ELRepo...install kernel-ml 更改grub配置 在安装完新 Kernrl 之后,系统是不会帮你切换到新内核,重启也不行,需要我们自己设置,将新内核设置为默认启动选项。...我们可以看到,安装完之后,内核没有切换过去,通过查看得知,新安装内核位于第一个位置,标记为 0。这是我们需要修改/etc/default/grub文件,以便于让系统在启动时让新内核成为默认选项。...注:如果文章超链接没出现,可以点击阅读原文去找超链接!!! ? ---- *版权声明:版权归作者本人所有,尊重原创,推送文章除非无法确认,都会注明作者和来源。

5.6K10

Linux 内核 内存管理】mmap 系统调用源码分析 ① ( mmap 与 mmap2 系统调用 | Linux 内核 mmap 系统调用源码 )

文章目录 一、mmap 与 mmap2 系统调用 二、Linux 内核 mmap 系统调用源码 一、mmap 与 mmap2 系统调用 ---- mmap 创建 " 内存映射 " 系统调用 有...2 种实现 , mmap 和 mmap2 ; 2 者区别是 : mmap 偏移单位是 " 字节 " , mmap2 偏移单位是 " 页 " , 但是在 arm 64 体系架构 , 没有实现 mmap2..., 只实现了 mmap 系统调用 ; 二、Linux 内核 mmap 系统调用源码 ---- arm64 架构体系 , 使用 mmap 系统调用 创建 " 内存映射 " , 调用 mmap 系统调用函数..., 执行如下操作 : 先检查 " 偏移 " 是否是 " 内存页大小 " " 整数倍 " , 如果偏移不是内存页大小整数倍 , 返回 -EINVAL 错误 ; 如果偏移是内存页大小整数倍 , 则调用...return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); } 参考路径 : linux

10.5K40

Linux系统内核如何升级

有些小伙伴在使用Linux系统时可能会遇到网卡不能使用,亮度不能调节,触摸板不能识别,等等问题,这些都是内核版本过低而导致,只需要把内核升级一下就可以, 下面为大家分享一下Linux系统内核升级方法。...在4代版本4.16和4.17有安装上区别: 下面是4.16版本文件选择: 下面是4.17版本文件选择: 安装顺序 使用sudo dpkg -i ***.deb 形式安装。...查看当前系统安装内核  dpkg --get-selections| grep linux1  console-setup-linux install  libselinux1:amd64 install...卸载内核 可以看到系统已经安装了多个内核版本,包括 headers 和 image ,可以删除这些来卸载旧内核。...总结 至此关于Linux内核升级教程已经全部完成,大家如果在内核升级过程遇到问题可以通过评论区将问题提交给我们。

8.5K30

Linux 内核Linux 操作系统结构 ( Linux 内核在操作系统层级 | Linux 内核系统及关系 | 进程调度 | 内存管理 | 虚拟文件系统 | 网络管理 | 进程间通信 )

文章目录 一、Linux 内核在操作系统层级 二、Linux 内核系统 三、Linux 内核系统之间关系 一、Linux 内核在操作系统层级 ---- Linux 内核 所在层级 : 整个计算机系统..., 由下到上介绍 : 计算机硬件 处于最底层 ; 计算机硬件 上面一层是 Linux 内核 , 计算机所有硬件操作都要经过内核 , 内核是 抽象资源操作 与 具体硬件操作细节 之间接口 ; Linux...内核 上面一层是 系统调用接口 , 系统调用 由大量指令组成 , 应用程序 通过 系统调用 调用内核功能 , 实现特定服务 , 如创建进程 ; 系统调用运行在 内核态 , 应用程序 运行在 用户态...; 最上层是 应用程序 , 应用程序 是 运行于操作系统 软件集合 ; 如下图所示 : 二、Linux 内核系统 ---- Linux 内核 5 个子系统 : 进程调度 ( Process...网络硬件通信 ; 进程间通信 ( Inter-Process ommunication ) : 支持 进程间 通信机制 ; 三、Linux 内核系统之间关系 ---- 进程调度 依赖于 内存管理

3.3K20

Linuxuname命令:获取系统内核和操作系统相关信息

Linux操作系统,uname命令是一个常用命令行工具,用于获取系统内核和操作系统相关信息。通过使用uname命令,您可以查看和检查Linux系统各种属性和特征。...下面是一些常见信息解析:内核名称(Kernel Name):显示操作系统所使用内核名称,通常为Linux。主机名(Hostname):显示计算机主机名,即计算机在网络唯一标识。...适用场景uname命令在Linux系统管理和维护具有广泛应用场景,包括但不限于以下几个方面:系统识别和版本检查:通过使用uname命令,您可以快速获取系统内核名称、版本和操作系统名称。...这对于系统管理员和开发人员来说非常有用,可以确定所使用Linux发行版和内核版本,以便进行相应配置和调试。...总结uname命令是Linux系统中一个非常有用工具,用于获取系统内核和操作系统相关信息。通过使用不同选项,您可以获取内核名称、主机名、内核版本、硬件架构和操作系统名称等信息。

34000

Linux 内核】宏内核与微内核架构 ( 操作系统需要满足要素 | 宏内核 | 微内核 | Linux 内核动态加载机制 )

文章目录 一、操作系统需要满足要素 二、宏内核 三、微内核 四、Linux 内核动态加载机制 一、操作系统需要满足要素 ---- 电脑上运行 操作系统 , 是一个 软件 ; 设备管理 : 操作系统需要..., 线程是独立运行 , 独立调度最基本单位 ; 二、宏内核 ---- 宏内核 : 内核代码 编译成 二进制文件 , 内核 运行在 一个 大内核 地址空间 , 可以 直接 访问 , 调用 内核代码... 通信模块 , 进程调度模块 , 内存管理模块 , 通过 消息 进行通信 , 微内核优点 : 稳定性好 , 实时性好 ; 微内核缺点 : 高度模块化 , 模块之间只能通过消息传递信息 , 效率低...; 四、Linux 内核动态加载机制 ---- Linux 内核模块动态加载 : Linux 内核 使用了 模块设计 , 可以进行 动态加载 内核模块 ; Linux 内核 核心实现 , 设备驱动实现..., 可以 编译成一个独立模块 , 这些独立模块可以被编译成 独立目标文件 , 可以在运行时 , 动态 加载 / 卸载 内核模块 ; 开发简单 : Linux 内核模块引入 , 带来了很多便利 , 很多内核驱动

4.1K30

Linux内核递归漏洞利用

6月1号,我提交了一个linux内核任意递归漏洞。如果安装Ubuntu系统时选择了home目录加密的话,该漏洞即可由本地用户触发。...背景知识 在Linux系统,用户态栈空间通常大约是8MB。如果有程序发生了栈溢出的话(比如无限递归),栈所在内存保护页一般会捕捉到。...Linux内核栈(可以用来处理系统调用)和用户态栈很不一样。...Linux大多数文件系统既不用底层设备(伪文件系统,比如sysfs, procfs, tmpfs等),也不用块设备(一般是硬盘上一块)作为备用存储设备。...在我写漏洞报告,我有提到给内核增加内存保护页,移除栈底部 thread_info结构体,这样缓解这类漏洞利用,有其他操作系统就是这么干

2K60

浅谈 Linux 内核无线子系统

浅谈 Linux 内核无线子系统 Linux 内核是如何实现无线网络接口呢?数据包是通过怎样方式被发送和接收呢?...1 全局概览 在开始探索 Linux 无线具体细节之前,让我们先来把握一下 Linux 无线子系统整体结构。如图1,展示了 Linux 无线子系统各个模块之间抽象关系。 ?...图一 Linux 无线网络结构示意图 图示虚线内展示内核空间情况。用户空间程序运行在最上层,而硬件相关设备则在最下面。图示左边为以太网设备,右边为 WiFi 设备。...现阶段大部分无线设备都是软件实现软 MAC 设备。 通常我们把 Linux 内核无线子系统看成两大块: cfg80211 和 mac80211 ,它们连通内核其他模块和用户空间应用程序。...刚才这些发生在图一 Data Application 模块,最终应用程序陷入系统调用,随后在内核空间进行接下来工作。

3.2K31

浅析linux内核idr机制

大家好,又见面了,我是全栈君 idr在linux内核中指就是整数ID管理机制,从本质上来说,这就是一种将整数ID号和特定指针关联在一起机制。...这个机制最早是在2003年2月加入内核,当时是作为POSIX定时器一个补丁。现在,在内核很多地方都可以找到idr身影。 idr机制适用在那些需要把某个整数和特定指针关联在一起地方。...举个例子,在I2C总线,每个设备都有自己地址,要想在总线上找到特定设备,就必须要先发送该设备地址。...如果我们PC是一个I2C总线上主节点,那么要访问总线上其他设备,首先要知道他们ID号,同时要在pc驱动程序建立一个用于描述该设备结构体。...这些函数都定义在 下面,我们通过分析I2C协议核心代码,来看一看idr机制实际应用: <linux-2.6.23/drivers/i2c/

1.7K20
领券