
Linux 驱动开发
文章平均质量分 84
kernel驱动开发
金城孤客
物联网 BLE 单片机 LINUX
展开
-
Linux I2C总线驱动调试之i2c-tools工具使用
目录概述i2c-tools移植扫描I2C设备读I2C寄存器写I2C寄存器概述调试I2C总线之前,我们可以i2c-tools工具,扫描I2C总线上的所有I2C设备、读写I2C寄存器,该工具使得I2C设备的调试非常方便。如果嵌入式Linux环境中不带有i2c-tools,需要自行移植到文件系统中。i2c-tools移植1.获取源码:https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/i2c-tools-4.1.tar.xz2.解压原创 2021-07-28 17:41:57 · 6049 阅读 · 1 评论 -
Linux驱动之中断实验(基于设备树编程)
概述Linux内核提供了完善的中断框架,我们只需要申请中断,然后注册中断处理函数即可,使用非常方便,不需要像单片机那样进行复杂的寄存器配置。#基础知识(一) 中断号每个中断都有一个中断号,通过中断号区分不同的中断。中断号可以在芯片datasheet中查找到,比如GPIO的中断号,一般会在GPIO章节或者interrupt章节会有介绍, 搜索” Interrupt Sources”,或许你就...原创 2019-11-07 10:51:03 · 2092 阅读 · 0 评论 -
linux驱动之LED实验(基于寄存器操作)
概述linux驱动可分为三类:字符设备、块设备、网络接口。字符设备驱动程序就是为具体硬件的file_operations结构编写各个函数,实现open、read、write、ioctl等系统调用。实现步骤:编写驱动程序xxx.c文件,编写Makefile、编译链接生成xxx.ko文件、insmod生成节点、编写应用测试程序、执行测试程序查看驱动效果。基础知识(一)杂项设备可以理解为...原创 2019-09-24 11:21:08 · 1461 阅读 · 1 评论 -
linux驱动之ADC实验
概述ADC使用的是SOC自带的功能,一般SOC厂家已经把相应的驱动代码写好,我们只需要在设备树中使能该功能则可。在进行ADC读操作时,只需要了解对IIO子系统的使用操作,即可完成ADC的读取。基础知识(一) IIO子系统IIO(industrial I/O )子系统是专门用于ADC/DAC的内核子系统,Linux内核通过IIO框架把模数转换的功能集合在一起。加速度计、陀螺仪、电压测量、广电...原创 2019-11-23 12:46:18 · 3879 阅读 · 0 评论 -
Linux 串口驱动与使用
目录概述实验目的配置设备树编译设备树串口收发测试移植minicom工具概述串口驱动和IIC/SPI驱动不同,它没有什么主机端和设备端之分,就只有一个串口驱动。官网会已经把串口驱动编写好了,我们真正要做的就是在设备树中添加所要使用的串口节点信息。当系统启动以后串口驱动和设备匹配成功,相应的串口就会被驱动起来,生成/dev/ttyx节点。移植minicom串口工具,可以很方便的对串口进行读写操作。虽然串口驱动不需要我们去写,但是串口驱动框架我们还是需要了解的。实验目的配置设备树,使能Atm原创 2021-07-29 14:49:27 · 3158 阅读 · 0 评论 -
linux驱动之按键输入实验(基于系统自带gpio-keys.c驱动)
概述采用Linux自带的按键驱动gpio-keys.c,实现按键输入读取。与上一章实现led-gpio类似。修改设备树文件在根节点‘/’下创建key节点,节点名称为keys。节点内容如下(可参考别的平台的key节点编写):keys:{compatible = “gpio-keys”;key1{label = “volume-up”linux,code = <114>;...原创 2019-10-28 14:50:34 · 5320 阅读 · 1 评论 -
Linux驱动之IIC实验(基于设备树编程)
概述I2C驱动分为两个部分:主机驱动(SOC的I2C控制器驱动),设备驱动(针对具体设备编写的驱动)。—和platform驱动相似。一般i2c控制器驱动SOC厂商已经写好了,我们只需要编写设备驱动。本实验基于IIC2端口读取温度芯片TMP1075(设备地址0x48,温度寄存器地址0x00,2字节)。基础知识(一)IIC读时序IIC读时序分为4大步,第一步时发送设备地址,第二步时发送...原创 2019-11-19 20:22:16 · 3582 阅读 · 2 评论 -
linux驱动之platform设备驱动实验
概述platform机制:把硬件相关的代码(固定的,如板子的网卡、中断地址)和驱动(会根据程序作变动,如点哪一个灯)分离开来,即要编写两个文件:dev.c和drv.c(platform设备和platform驱动)platform会存在/sys/bus/里面,如下图所示, platform目录下会有两个文件,分别就是platform设备和platform驱动驱动的分离,引出了总线(bus)、...原创 2019-11-23 15:37:39 · 495 阅读 · 0 评论 -
Linux驱动之设备树(设备树下的LED驱动实验)
概念Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离。相当于从驱动代码分离出来的配置文件,比如串口的波特率通过设备树配置,当需要改变波特率时,就不用修改驱动,直接修改配置文件则可。设备树源文件扩展名为.dts(device tree source),一般放置在内核的"arch/arm/boot/dts/"目录内。设备树源文件的通用部分用.dtsi文件描述,一般用于描...原创 2019-10-24 17:10:57 · 6558 阅读 · 2 评论 -
linux驱动之LED实验(基于系统自带leds-gpio.c驱动)
概述上一章中编写的设备树LED驱动,都是配置LED灯的GPIO寄存器,驱动方式和裸机没有区别。Linux是一个庞大而完善的系统,尤其是驱动框架,像GPIO这种最基本的驱动不可能采用“原始”的裸机驱动方式,否则就相当你买了一辆车,结果每天推着车去上班。基础知识(一)pinctrl子系统Linux内核提供了pinctrl和gpio子系统用于GPIO驱动,可以在leds-gpio.c中可以看到相...原创 2019-10-25 15:57:13 · 10988 阅读 · 0 评论 -
Linux驱动之按键读取(基于寄存器操作)
概述其实就是在上一章“LED驱动”中的file_operations中添加read系统接口,仅此而已。基础知识(一) copy_from_user copy_to_user使用函数包含于<asm/uaccess.h>头文件中,实现内核空间和用户空间之间的数据拷贝功能。/static inline int copy_from_user(void *to, const void ...原创 2019-09-25 11:14:23 · 1060 阅读 · 0 评论 -
Linux安装配置NFS服务器
NFS简介NFS(network file system)即网络文件系统,能使使用者访问网络上别处的文件就像在使用自己的计算机一样。我们可以在 Ubuntu 上制作开发板的根文件系统,然后使用 NFS 来加载根文件系统到开发板的DDR 上。安装NFS服务在ubuntu终端执行以下指令:安装NFS服务:sudo apt-get install nfs-kernel-server新建NFS共享目录:sudo mkdir /home/ boyee/nfs设置NFS共享目录权限:sudo c原创 2021-07-30 13:57:06 · 1182 阅读 · 0 评论 -
Linux下对GPIO的操作控制(基于GPIO子系统)
目录概述GIPO子系统介绍示例:通过GPIO子系统控制LED(GPIOA29)概述以前学习了LED和按键驱动,实际上,在Linux中实现这些设备驱动,有一种更为推荐的方法,就是GPIO子系统和Input子系统。GPIO子系统可以控制IO的初始化、输出高低电平值,读取IO的输入电平;Input子系统处理输入事务,任何输入设备的驱动程序都可以通过Input输入子系统提供的接口注册到内核,利用子系统提供的功能来与用户空间交互。例如控制LED、读取按键、触摸屏、鼠标都可以通过这些子系统接口实现。GIPO子系统原创 2021-07-27 19:04:25 · 13746 阅读 · 0 评论 -
Linux内核移植之DM9000网卡驱动
简介DM9000是一款低成本的以太网MAC控制器,集成MAC和PHY功能,内部有16K的SRAM,像访问存储芯片一样对DM9000进行操作读写。Linux3.x内核自带有DM9000驱动,我们需要将DM9000编译进入内核,配置好对应设备树。除此之外,使用到的硬件资源也需要进行相应的初始化。添加dm9000网卡设备驱动在根目录下执行make menuconfig,进入配置界面。输入’/’进入搜索界面,可以查找到DM9000的配置位置。使能DM9000,使其编译进入内核。(按空格键选中)在设备原创 2021-07-13 09:26:38 · 1265 阅读 · 3 评论 -
Linux 基于buildroot移植根文件系统
目录简介buildroot简介移植目标编译构建根文件系统增加自启动脚本常见问题简介rootfs(root file system根文件系统),是一个文件系统,内核启动过后第一个挂载它,kernel会引导程序加载一些文件系统中的脚本和服务进行初始化。Linux支持多种文件系统:ext3(extended file system)、nfs(network file system)、jffs、romfs(只读文件系统,可通过ramdisk访问)。VFS(虚拟文件系统):对不同的文件系统做一个抽象,提供统一原创 2021-07-02 17:58:41 · 1294 阅读 · 1 评论 -
Linux内核移植
目录移植目标设置环境变量下载解压内核配置并编译内核移植目标获取Linux内核源码;修改内核,使内核启动能正确挂载根文件系统rootfs(即选择内核支持的文件系统格式);修改驱动,裁剪内核;编译生成uImage,下载体验。设置环境变量配置或编译内核之前,首先要确定目标CPU架构,以及编译时采用什么工具链。方法一:通过修改根目录下的Makefile中ARCH和CROSS_COMPILE值。方法二:修改环境变量。修改/etc/profile文件,对所有用户生效,执行source /etc/p原创 2021-06-30 17:24:14 · 834 阅读 · 9 评论 -
u-boot移植
目录(一)移植uboot目标:(二)u-boot下载编译(三)uboot的使用(四)修改环境变量参数(五)修改uboot,启动运行(一)移植uboot目标:将linux内核和dtb设备树加载到RAM;将文件系统加载到RAM;引导Linux运行;执行文件系统中的linuxrx程序,对linux系统初始化。(二)u-boot下载编译1.在官网(https://ftp.denx.de/pub/u-boot/)下载u-boot。2.在ubuntu下面解压:tar -jxvf u-boot-201原创 2021-06-28 19:28:45 · 458 阅读 · 2 评论 -
正点原子 Linux imx6ull学习开始 Action~
从事嵌入式开发有好多年了,一直都以MCU为主,工作期间也接触过Linux,都是断断续续的。既然嵌入式是我干饭的工具,那Linux也应该有一个扎实的基础,从今天开始,准备系统的学些一遍Linux知识,我会利用优快云记录学习的过程,每天更新一篇,供同道中人查阅,佛光普照、只渡有缘人。选择imx6ull开发板,为什么选择学习imx6ull开发板,因为资料多啊,现在各大开发板厂商都出了imx6ull的开发板和教程。包括正点原子、韦东山、野火、迅为等等。① 正点原子 imx6资料,,资料全面,简单易懂,完全开原创 2021-06-17 13:59:51 · 3134 阅读 · 0 评论