Linux kernel 设备树编程实践
文章平均质量分 85
本专栏主要介绍Linux kernel 3.0之后,内核最新的硬件资源管理方式DeviceTree(设备树)的基本原理、编程实践、常见问题的总结。
奔跑的码仔
心有多大,舞台就有多大
展开
-
嵌入式Linux开发|pinctrl子系统
众所周知,每颗SoC都会有很多的pin,除了具有特殊作用的,比如电源、地等pin,其他的pin一般都会**“身兼数职”**,比如,一个pin既可以当做GPIO来使用,也可以用作UART的TX,又或者是SPI的MOSI;而且,这些pin往往具有不同的能力,比如,上拉、下拉、不同的驱动能力等等。pinctrl子系统就是用来完成上述功能而设计的,pinctrl对下管理SoC所有的pin,对上提供配置SoC所有pin的接口。通常,再将linux系统移植到一款新SoC上时,其中一项工作,就是将所有pin注册到pinc原创 2022-06-08 22:41:13 · 1615 阅读 · 0 评论 -
嵌入式Linux开发|点亮那颗LED灯
做嵌入式开发离不开LED,小小的LED可以作为系统状态指示,为调试带来方便。下面是典型的LED控制电路:可以看到,通过控制AA27和AF12这两个引脚达到控制LED1和LED2这两个LED。如果是单片机开发,控制一颗LED的步骤比较的简单、直接,直接配置GPIO功能,输出高、底电平就可以控制LED了。相对来说,在Linux系统下,想要控制一颗LED,就比较费周折了,有下面几种方式:通过gpiolib子系统控制IO来驱动LED。通过sys子系统控制IO来驱动LED,即通过/sys/class/g原创 2022-05-15 16:50:26 · 2632 阅读 · 0 评论 -
Linux内核GPIO子系统分析
概述Linux内核的GPIO子系统通过gpiolib来实现,gpiolib始于2.6.24版本,这里是gpiolib的初始提交信息,这里是gpiolib的初始代码。下面是子系统的架构图:gpiolib向上为使用gpio的设备驱动程序提供了统一的接口,向下为SoC的gpio控制器提供注册到系统的接口。gpiolib为驱动程序提供的服务包括:系统中GPIO信息的管理,比如有多少个GPIO,每个GPIO的编号是什么等;GPIO的申请、释放;IO的输入、输出方向的设置;IO电平的输出或者输入设置;原创 2020-08-23 10:18:31 · 6049 阅读 · 6 评论 -
Linux I2C设备驱动基本规范
不同于单片机驱动开发,即使是简单的I2C设备驱动程序,如果要在Linux上实现同种功能的驱动程序,事情也会变的复杂起来。对于初学者而言,主要的困难就是不知道如何使用Linux现有的驱动框架,去完成驱动程序的开发。I2C设备驱动,相对来说比较简单,但由于Linux大部分设备驱动框架十分的类似,所以,通过对于I2C驱动框架的学习,可以作为继续深入Linux其他设备驱动框架的基础。学习一项技术的最好方式就是去应用它,所以为了更为高效的学习,本文结合两个i2c设备驱动实例,来分析如何从零实现一个驱动程序。程序框原创 2020-08-03 18:44:14 · 2439 阅读 · 0 评论 -
内核模块-实现一个简单的设备
上一篇文章讲了如何实现基于内核模块的“helloworld”,相信大家通过这个例子对于内核模块有了一个基本的了解。当然,内核模块绝不仅仅只能实现这点功能,其最大的应用就是实现硬件的驱动程序。其实,linux内核中很大一部代码都是硬件处理相关的,比如,设备-总线-驱动框架,USB框架、spi框架、i2c框架等等,对应于各种不同的硬件设备,相应的就会有设备驱动程序,从最简单的按键、LED驱动,到十分复杂的USB子系统驱动,可以好不夸张的说,Linux内核可以适配绝大多数的硬件设备。那这些驱动框架和驱动程序,一原创 2020-05-18 21:43:01 · 660 阅读 · 0 评论 -
内核模块-基本概念
Linux内核模块简介众所周知,Linux系统已经成了应用最为广泛的操作系统。小到日常经常用到的电子设备,比如,智能手机、智能手表等,大到互联网公司的数据中心,都可以见到Linux的身影。Linux之所以如此成功,其中一个比较关键的因素就是她非常优秀的内核设计。这种设计可以使其适应各种场景的需求,加上天生开源的特质,想不火都难。今天,本文所要介绍的就是Linux内核相关开发中一个比较基础的概念...原创 2020-05-03 15:48:03 · 1697 阅读 · 0 评论 -
DTS中如何配置设备相关的pinctrl
设备驱动如何在dts配置pins进行嵌入式Linux驱动开发时,不可避免的会涉及到DTS相关的编写工作,而其中,最为重要的一项工作就是pinctrl相关的配置,这包括pins的功能选择(作为普通IO,还是作为外围控制器的pins)以及pins的配置(pull-up/pull-down、驱动能力、三态等)。内核中的pinctrl子系统抽象了不同SoC中关于pins的管理方式,Linux内核之pi...原创 2020-03-29 22:53:20 · 5154 阅读 · 0 评论 -
04-Linux设备树系列-GPIO驱动实践
1. 前言2. GPIO编程模式2.1 编程接口2.2 DTS配置2.3 GPIO驱动程序2.3 GPIO测试程序3. GPIO子系统的变化1. 前言GPIO驱动开发可能算是Linux内核设备驱动开发中最为简单、最常见的一个方向,对于开发板的按键、LED、蜂鸣器、电源控制等模块,可能都是使用GPIO实现的。Linux内核的GPIO子系统在内核不断的演进过程中进...原创 2018-09-17 14:48:39 · 10640 阅读 · 2 评论 -
Booting ARM Linux-启动ARM-Linux
文章目录Booting ARM Linux设置和初始化RAM初始化一个串口检测机器类型设置启动数据设置内核标记列表设置Device Tree加载 initramfs调用kernel imageBooting ARM Linux本文翻译自Linux内核文档,如有翻译不当,敬请谅解!以下文字说明与内核的2.4.18-rmk6版本及以上相关。为了引导ARM Linux,您需要一个引导加载程序,它...原创 2019-02-22 11:52:05 · 832 阅读 · 0 评论 -
Analyzing the Linux boot process-分析Linux启动过程
本文翻译自Analyzing the Linux boot process.箴言:了解运行良好的系统是将来处理不可避免的故障的很好准备开源软件领域中流行的最为古老笑话:"the code is selfdocumenting."经验表明:阅读源码类似于收听天气预报(但明智的人仍会走出去检查天气)。下面是一些关于如何利用熟悉的调试工具在引导时检查和观察Linux系统的技巧。了解运行良好的系统是...原创 2019-02-21 17:12:45 · 885 阅读 · 0 评论 -
GPIO驱动实践-基于4.18.7内核
1. GPIO子系统的变化2. 编程模式2.1. GPIO APIs2.2 编程规范3. 驱动示例4. 总结1. GPIO子系统的变化最近在研究最新的Linux kernel 4.18.7时,发现其关于GPIO子系统的发生了比较大的变化。而且在linux/gpio.h中做了关于声明: * This is the LEGACY GPIO bulk includ...原创 2018-09-17 17:39:40 · 3034 阅读 · 0 评论 -
02-Linux设备树系列-工具使用
DTS文件DTCDTBBindings文件BootLoader支持DTS文件文件.dts是一种ASCII文本格式的设备树描述,由于其是纯文本形式的,所以十分适合开发人员阅读和修改。由于多个开发板会对应于同一款SoC,所以,可以将关于同一款SoC的DT配置提取成一个单独文件,称其为.dtsi文件。.dts和.dtsi文件类似于C语言的源文件和头文件的关系,所以.dtsi...原创 2018-09-05 11:17:59 · 1478 阅读 · 0 评论 -
00-Linux设备树系列-简介
1.历史2.数据模型2.1高级视图2.2平台识别2.3运行时配置2.4设备数量(Device population)附录A:AMBA设备设备树数据的Linux使用模型作者:Grant Likely grant.likely@secretlab.ca本文介绍Linux如何使用设备树。概述 设备树相关的数据格式的资料可以在设备树使用页面 elinux.org...原创 2018-09-04 17:39:06 · 2038 阅读 · 0 评论