
Linux基础
文章平均质量分 84
嵌入式Linux基础
Swiler
就凭一把伞,躲过一阵潇潇的冷雨,也躲不过整个雨季
展开
-
【IMX6ULL】Linux中的MISC设备驱动(搭配platform设备驱动)
Linux MISC驱动MISC驱动也叫杂项驱动,但是本质上就是一个字符设备驱动,通常嵌套在platform总线驱动中。MISC设备驱动的主设备号都为10,不同设备使用不同的从设备号,也就是说,这些不同的设备在设备树上的位置处于MISC设备节点的子节点的层次。即 根节点 --> MISC节点 --> 设备节点。miscdevice 结构体minor:子设备的设备号;name:设备名字;fops:操作函数集合,一个结构体变量,存放各种操作函数;注册MISC设备API/* @fu原创 2022-05-12 13:58:47 · 759 阅读 · 0 评论 -
【IMX6ULL】Linux中的platform驱动
Linux中的platform驱动platform 设备驱动,也叫做平台设备驱动。它来源于将驱动分离和分层的软件设计思路。驱动的分离 也就是将主机驱动和设备驱动分离,不同主机的同一类驱动提供统一的接口API,然后在写设备驱动的时候只要调用这些API函数就能完成驱动的编写。减少了编写驱动底层代码的时间。驱动的分层 分层即是将驱动分成不同的层次,每个层只要做自己的事。例如 input 子系统的最底层是设备原始驱动,负责获取输入设备的原始值,然后上传给核心层;核心层会处理这些数据,然后提供 file原创 2022-05-11 22:47:36 · 391 阅读 · 0 评论 -
【IMX6ULL】 Linux 的GPIO中断和定时器消抖配置按键驱动
Linux 中断驱动相关API函数request_irq用于申请中断,但不能在中断上下文或其它禁止睡眠的代码段中使用该函数。int request_irq( unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)irq:要申请中断的中断号。handler:中断处理函数,当中断发生以后就会执行此中断处理函数。flags:中断原创 2022-05-11 21:22:41 · 1948 阅读 · 0 评论 -
Linux内核的 pinctrl 和 gpio 子系统
IMX6ULL的pinctrl子系统驱动在 imx6ull.dtsi 文件中,有如下一个子节点,这个节点是在 根-> soc->aips1->iomuxc,用于IO复用功能。但是该节点的内容主要是追加在 imx6ull-alientek-emmc.dts 文件中,因为不同IO不同需求配置不同,所以就追加在 .dts 文件里。以下就是部分追加内容。而在 fsl,pins = < > 里的内容,就是具体的每一个IO复用功能的配置。MX6UL_PAD_XXX__XXX_XX原创 2022-05-11 17:21:35 · 1143 阅读 · 1 评论 -
IMX6ULL的定时器驱动(搭配pinctrl和gpio子系统,自旋锁)
自旋锁自旋锁顾名思义就是一个一直在旋转循环忙等待的锁,哪个线程有锁就是哪个线程在访问共享资源。而其它线程只能在那等待,当锁被释放了之后,才轮到其它线程占有这个锁。自旋锁只适用于线程持有锁的时间不算太长的情况下,否则会浪费处理器时间,降低系统性能。自旋锁API函数适用于线程和线程之间。需要注意的是:被自旋锁保护的临界区绝对不能调用任何能够引起睡眠或阻塞的API函数,不然可能导致死锁现象。如果在线程之间的并发访问时,中断也要参与的话,在中断里可以使用自旋锁,但是在获取锁之前要先禁止本地中断(本CPU中原创 2022-05-11 17:12:39 · 512 阅读 · 0 评论 -
Linux驱动开发中的中间件:设备树
Linux设备树设备树的产生是为了解决内核源码的arch/arm目录下代码混乱和臃肿的问题(过去每个厂商出个板子就要提供外设硬件和平台硬件信息,这些信息以.c和.h文件的形式呈现)。在使用设备树之后,就使得每个硬件平台的硬件资源仅需要一个设备树文件来描述了,而不用在内核源码的arch/arm下以.c 或 .h 文件来定义。Linux内核则在启动过程中,通过解析设备树中的硬件资源来初始化某个具体的平台。DTS、DTB、DTC三者的关系DTS是设备树源码文件;DTB是DTS编译后得到的二进制文件;DT原创 2022-05-06 15:29:07 · 1542 阅读 · 0 评论 -
Linux驱动开发【一】:字符设备驱动
[驱动文件内容]对设备的操作函数打开设备从设备文件中读取数据向设备文件内写入数据关闭设备文件三个组件设备操作函数结构体设备初始化(作为驱动的入口函数)设备注销(作为驱动的出口函数)其他信息LICENSE作者信息…驱动文件包含的函数打开设备static int chrdevbase_open(struct inode *inode, struct file *filp)从设备读取数据static ssize_t chrdevbase_read(struct f原创 2022-05-05 04:16:44 · 766 阅读 · 0 评论 -
IMX6ULL驱动开发前奏三:根文件系统构建步骤明细
Linux搭建根文件系统根文件系统首先是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。使用BusyBox构建根文件系统先在NFS服务器目录下创建一个rootfs文件夹,用于通过NFS挂载根文件系统。(存放在NFS下的文件夹)获取的busybox压缩包放入任意文件夹中并解压。(存放在自定义任意文件夹)/*命令*/mkdir rootfstar -vxjf bus原创 2022-05-03 20:28:55 · 899 阅读 · 0 评论 -
IMX6ULL驱动开发前奏二:Linux内核移植步骤明细
Linux内核移植获取源码和修改Makefile先从NXP获取官方源码,添加到自定义的目录下,然后解压tar -vxjf linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2修改顶层Makefile,也就是内核根目录下的Makefile。给ARCH和CROSS_COMPILE变量赋值编译Linux内核先清理下内核make clean再配置内核make imx_v7_mfg_defconfig最后编译make -j16编译成功后如下图原创 2022-05-03 20:25:11 · 2030 阅读 · 0 评论 -
IMX6ULL驱动开发前奏一:u-boot移植步骤明细
U-boot移植uboot实际上就是一个裸机程序,但它是用来引导linux内核启动的,就像电脑上的bios。本文只要是记录利用NXP官方的uboot进行改造,适配正点原子IMX6ULL阿尔法开发板的过程涉及到的文件(可能不全)/home/swiler/uboot_official/uboot-imx-rel_imx_4.1.15_2.1.0_ga_alientek/configs/mx6ull_14x14_evk_defconfig/home/swiler/uboot_official/uboo原创 2022-04-24 17:15:29 · 1898 阅读 · 0 评论 -
IMX6ULL裸机开发之硬件SPI分析及配置过程
裸机配置硬件SPI详细的SPI时序介绍可看我的另外一篇文章:STM32之SPI详细解析ESPI介绍IMX6U 自带的 SPI 外设叫做 ECSPI,全称是 Enhanced Configurable Serial Peripheral Interface,ECSPI包含一个64x32接收缓冲区(RXFIFO)和一个64x32传输缓冲区(TXFIFO)。通过数据FIFOs,ECSPI允许以更少的软件中断快速进行数据通信。IMX6U有4个ESPI。下图是ECSPI的框图。由一堆寄存器,时钟产生器,外部引脚原创 2022-04-21 21:05:08 · 2050 阅读 · 0 评论 -
IMX6ULL裸机开发之硬件IIC分析及配置过程
裸机配置硬件I2C关于I2C的具体介绍,可以参考我的另一篇文章STM32之IIC详细解析IMX6U的硬件I2C特性兼容标准I2C总线;软件可配置64个不同的串行时钟频率;软件可选的应答信号;start/end信号生成和检测;重复start信号生成;确认位生成;总线busy检测。I2C的两种模式标准模式:在该模式下I2C传输速率可达100kb/s;高速模式:在该模式下I2C传输速率可达400kb/s;外部引脚MAPIMX6U有4组IIC,这里举个例子,另外的参考《IMX6原创 2022-04-21 17:39:57 · 1520 阅读 · 0 评论 -
IMX6ULL裸机开发之配置eLCDIF点亮RGB液晶屏分析及配置过程
裸机配置RGB液晶屏显示接口eLCDIF主要特性总线主接口到源帧缓冲区数据进行显示刷新。这个接口也可以用于驱动显示器的数据。PIO接口,以管理显示器和SoC之间的数据传输。8/16/18/24位LCD数据总线支持可用,具体取决于I/Omux选项。可编程定时和参数的MPU、VSYNC和DOTCLKLCD接口,以支持多种显示器。外部接口LCD_DATA0~LCD_DATA23:24根数据线,用来传输数据。双向IO口。LCD_BUSY:忙信号线。LCD_CLK:时钟信号线。LCD_CS:原创 2022-04-21 15:41:36 · 1699 阅读 · 0 评论 -
IMX6ULL裸机开发之GPT通用定时器分析及配置过程
IMX6U裸机配置通用定时器GPT介绍先来看看GPT(General Purpose Timer)即通用定时器的概述图:绿色方框部分是时钟源,它有一个12位的分频器,分频系数范围为 1 ~ 4096;蓝色高亮处是一个32位的计数器,并且是向上计数的;红色方框是两个输入捕获通道;橙色方框是三个输出比较通道;其中输出比较通道比较的是 Timer Output Regx 寄存器和 Timer Counter 寄存器的值,输出口则是三个GPT_COMPAREx;无论输入输出,都有对应的中断事件,这原创 2022-04-20 18:50:44 · 1365 阅读 · 0 评论 -
IMX6ULL裸机开发之EPIT周期性定时器分析及配置过程
周期中断定时器关于EPIT定时器的内容位于《IMX6UL参考手册》的1013页。Enhanced Periodic Interrupt Timer (EPIT):增强型周期中断定时器,这个定时器的计数方式是向下计数。即计数一次就减一。并且这个定时器主要工作是完成周期性中断定时。EPIT的组成EPIT由五个部分组成:时钟源,12位分频器,三个32位的寄存器,中断,输出引脚。时钟源可以来自:ipg_clk、ipg_clk_32、ipg_clk_highfreq。12位预分频器的分频系数为:1~409原创 2022-04-20 13:51:05 · 683 阅读 · 0 评论 -
IMX6ULL裸机开发之时钟树分析及配置过程
时钟时钟树时钟树由三部分组成:时钟切换控制器,根时钟产生器,系统时钟一个外设的时钟信号的产生途径:晶振向芯片输入时钟信号,信号进入时钟切换控制器,经过用户配置,产生PLL时钟信号,该信号进入根时钟产生步骤,经过分频或倍频,最终成为系统某个外设的时钟信号。(这个时钟树难度不大,但是分支太多,需要配置的寄存器也多,所以看起来会比较费劲,但是其原理都是大体一致的)橙色梯形的是选择器,可以选择不同的PLL时钟作为时钟源;矩形就是分频器(2位,3位,6位)。黄色高亮的就是用来配置选择器的各种寄存器时钟切原创 2022-04-19 19:02:09 · 2818 阅读 · 0 评论 -
IMX6ULL裸机开发之点亮LED灯
裸机点亮LED灯该实验使用正点原子的linux开发板和下载工具知识储备GPIO时钟控制器在《IMX6ULL用户手册》中,时钟控制器模块介绍在第18章首先看CCM Clock Gating Register 0 (CCM_CCGR0) ~ CCM Clock Gating Register 6 (CCM_CCGR6) ,这7个寄存器是用来控制每个模块的时钟。这些寄存器都是32位的,每两个位控制一个外设的时钟。如下是配置效果:00:所有模式下都关闭外设时钟。01:只有在运行模式下打开外设时钟,等原创 2022-04-18 17:40:55 · 1047 阅读 · 3 评论 -
十、Linux开发板控制LED灯设备
控制LED灯设备驱动程序本质:为硬件设备创建相应的设备节点文件创建设备文件时,规定好设备文件的使用方式。应用程序根据驱动程序规定的设备文件使用方式去控制硬件控制硬件设备步骤1、找出硬件设备所对应的设备节点文件两个地方:/dev目录下对驱动程序熟悉的工程师可以使用,一个设备节点文件控制硬件全部特性/sys目录下业余工程师使用,一个设备节点文件只控制硬件的一个特性严格来说,它下面的文件是Linux内核导出到用户空间的硬件操作接口2、找出驱动程序规定的设备文件使用方式LE原创 2022-02-26 19:03:21 · 2092 阅读 · 0 评论 -
九、文件描述符和打开模式
文件描述符和打开模式文件描述符一种特殊的索引,实际上就是进程中file_struct结构体成员fd_array的数组下标文件打开模式主模式:O_RDONLY:只读模式O_WRONLY:只写模式O_RDWR:读写,模式副模式:O_CREAT:当文件不存在,需要去创建文件O_APPEND:追加模式O_DIRECT:直接IO模式O_SYNC:同步模式O_NOBLOCK:非阻塞模式open_close函数OPEN函数头文件:#include <sys/types.h&原创 2022-02-21 23:10:54 · 365 阅读 · 0 评论 -
八、从0开始编写一个Makefile
MakefileMakefile简介make命令执行时,需要一个makefile文件,以告诉make命令需要怎么样的去编译和链接程序。eg:一个工程有8个c文件,和3个头文件,我们要写一个makefile来告诉make命令如何编译和链接这几个文件。规则是:如果这个工程没有编译过,那么我们的所有c文件都要编译并被链接。如果这个工程的某几个c文件被修改,那么我们只编译被修改的c文件,并链接目标程序。如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的c文件,并链接目标程序。只要我原创 2022-02-21 23:10:33 · 766 阅读 · 0 评论 -
七、安装NFS服务器
安装NFS服务器什么是NFS服务器 NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利。客户端可以将本地挂载目录下的文件挂载到服务端的共享目录中去。服务端就可以读取这些文件。NFS服务的优缺点1、优点(1)节省本地存储空间将常用的数据存放在一台原创 2022-02-20 20:59:25 · 1224 阅读 · 0 评论 -
六、Git简介
Git简介安装Gitwindows:https://gitforwindows.orgUbuntu:sudo apt install git -y项目资料下载远程仓库GitHub仓库地址:https://github.com/Embdefire/embed_linux_tutorialGitee 仓库地址:https://gitee.com/wildfireteam/embed_linux_tutorial克隆仓库git clone + 远程仓库地址仓库更新git pull原创 2022-02-20 20:54:10 · 203 阅读 · 0 评论 -
五、构建deb软件安装包
构建deb软件安装包Linux软件包的组成文件类型保存目录普通程序/usr/binroot权限程序/usr/sbin程序配置文件/etc日志文件/var/log文档文件/usr/share/docLinux软件包源码包优点:开源免费自由裁剪功能修改源代码缺点:安装步骤繁琐编译时间长新手无法解决编译问题二进制包优点:简单易用安装速度快缺点:无法阅读修改源码无法裁剪功能依赖性强deb包原创 2022-02-20 20:52:02 · 1426 阅读 · 0 评论 -
四、Linux环境变量
全局变量VS环境变量直接定 export定义一个变量abc,执行 /bin/bash程序,会在当前shell进程中创建一个shell子进程。此时的shell进程的子进程是不能访问这个变量的;先用exit命令退出shell子进程,返回到原来的shell进程,此时可以正常被访问。如果此时要让该变量被shell进程的子进程访问到,就要借用export命令,来把这个全局变量 abc 导出成环境变量,导出后重新执行 /bin/bash程序,创建shell子进程后,再对变量进行访问,此时就可以正常被访问原创 2022-02-20 20:48:39 · 197 阅读 · 0 评论 -
三、shell脚本编程
shell命令Shell 自带的命令称为内置命令,它在 Shell 内部可以通过函数来实现,当 Shell 启动后,这些命令所对应的代码(函数体代码)也被加载到内存中,所以使用内置命令是非常快速的。本质上就是一个自带的函数更多的命令是外部的应用程序,一个命令就对应一个应用程序。运行外部命令要开启一个新的进程,所以效率上比内置命令差很多,本质上就是一个应用程序。用户输入一个命令后,Shell 先检测该命令是不是内置命令,如果是就执行,如果不是就检测有没有对应的外部程序:有的话就转而执行外部程序,执行结原创 2022-02-20 20:40:46 · 1052 阅读 · 0 评论 -
二、Linux操作指令
Linux操作指令一、基本命令关机shutdown -h now 立刻关机shutdown -h 5 5分钟后关机poweroff 立刻关机重启shutdown -r now 立刻重启shutdown -r 5 5分钟后重启reboot 立刻重启help命令(命令说明书)eg: shutdown --help:ifconfig --help原创 2022-02-20 20:27:07 · 1166 阅读 · 0 评论 -
一、Linux简介
Linux简介Linux文件系统/bin存放二进制文件,存放着最基础最核心的命令的文件。/boot这个文件夹存放与系统启动相关的文件。/cdrom被用来挂载CD镜像/dev存放与设备相关的文件,操作各种外设就是通过这里面的文件来控制的/etc存放系统的配置文件和应用程序的配置文件/home存放普通用户的主目录/lib存放lib库,即bin目录下的应用程序的库文件/lib64作用与lib相似,用来支持64位系统的/media多媒体设备都挂载在这上面/mnt挂载,主要原创 2022-02-20 20:10:11 · 503 阅读 · 0 评论