![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 54
白日梦想家_pf
这个作者很懒,什么都没留下…
展开
-
Linux设备驱动中的异步通知
Linux设备驱动中的异步通知信号类似于硬件上使用的“中断”,只不过信号是软件层次上的。算是在软件层次上对中断的一种模拟,驱动可以通过主动向应用程序发送信号的方式来报告自己可以访问了,应用程序获取到信号以后就可以从驱动设备中读取或者写入数据了。整个过程就相当于应用程序收到了驱动发送过来了的一个中断,然后应用程序去响应这个中断,在整个处理过程中应用程序并没有去查询驱动设备是否可以访问,一切都是由驱动设备自己告诉给应用程序的。阻塞,非阻塞和异步:-阻塞IO是等待设备可访问后再访问-非阻塞IO原创 2021-11-12 23:18:28 · 1256 阅读 · 0 评论 -
Linux阻塞与非阻塞IO–非阻塞式IO
**Linux阻塞与非阻塞IO–非阻塞式IO**非阻塞式IO可通过以下方式实现:select 、poll 、 epollselect:在APP中select的使用,需要按照以下四部进行(1)fd_set readfds ; int fd;(2)FD_ZERO(&readfds);//清空所有fd_set的所有位,每个位对应一个描述符(也就是关心的事件)(3)FD_SET(fd, &readfds);//设置fd_set中的某一位(4)select(fd + 1,原创 2021-11-11 00:52:30 · 1443 阅读 · 0 评论 -
Linux阻塞与非阻塞IO--阻塞IO
Linux阻塞与非阻塞IO当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起,直到设备资源可以获取为止。对于非阻塞 IO,应用程序对应的线程不会挂起,它要么一直轮询等待,直到设备资源可以使用,要么就直接放弃。阻塞IO上图中应用程序调用 read 函数从设备中读取数据,当设备不可用或数据未准备好的时候就会进入到休眠态。等设备可用的时候就会从休眠态唤醒,然后从设备中读取数据返回给应用程序。1 int fd;2 int data = 0;原创 2021-11-09 23:46:14 · 1031 阅读 · 0 评论 -
嵌入式学习--SPI子系统分析
嵌入式学习–SPI子系统分析以示例 ICM20608对SPI子系统进行分析spi子系统框架见下图由图可看出,spi子系统里边内嵌了platform子系统。1.当设备树配置好的前提下,系统会根据设备树信息,自动生成一个平台设备(platform_dev)。2.系统动后,platform相关驱动会和platform_dev进行匹配(匹配项就是 . compatible的内容),匹配成功后,就会调用probe函数。3.在probe函数中,就会进行master的注册等操作。见图,会将一个新的mast原创 2021-08-26 00:35:32 · 258 阅读 · 0 评论 -
嵌入式学习--spi子系统学习(示例程序)
嵌入式学习–spi子系统学习spi_drv.h#ifndef SPI_DRV_H#define SPI_DRV_H#define ICM20608G_ID 0XAF#define ICM20608D_ID 0XAE/* 陀螺仪和加速度自测(出产时设置,用于与用户的自检输出值比较) */#define ICM20608_SELF_TEST_X_GYRO 0X00#define ICM20608_SELF_TEST_Y_GYRO 0X01#define ICM20608_SELF_T原创 2021-08-25 00:42:39 · 376 阅读 · 0 评论 -
嵌入式学习笔记--misc
嵌入式学习笔记–misc一、内核自带MISC驱动简介misc 的意思是混合、杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动。 MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动,所有的 MISC 设备驱动的主设备号都为 10,不同的设备使用不同的从设备号。随着 Linux字符设备驱动的不断增加,设备号变得越来越紧张,尤其是主设备号, MISC 设备驱动就用于解决此问题。 MISC 设原创 2021-08-25 00:33:19 · 2105 阅读 · 0 评论 -
嵌入式学习笔记--嵌入式Linux内核定时器和中断
嵌入式Linux内核定时器和中断**一、内核定时器**Linux 内核使用 timer_list 结构体表示内核定时器, timer_list 定义在文件include/linux/timer.h 中struct timer_list { struct list_head entry; unsigned long expires;/* 定时器超时时间(jiffies),单位是节拍数...比如我们现在需要定义一个周期为 2 秒的定时器,那么这个定时器的超时时间就是 jiffies+(2*HZ)原创 2021-07-21 23:45:45 · 765 阅读 · 0 评论 -
使用gpio子系统和pinctrl子系统实现按键的操作
使用gpio子系统和pinctrl子系统实现按键的操作步骤一:看硬件原理图,获知按键用到的IO口。由以下两图可知key0用的是UART_CTS步骤二:查imx6ull的参考手册,获取寄存器相关信息。第一张图显示的寄存器设置的IO复用的信息,也就是将IO复用为GPIO1_IO18,对应的寄存器的值为0x05.下边的图设置的是GPIO1_IO18的电器属性,如:上拉、下拉、开漏、频率。。。。对应寄存器的值为0xF080.步骤三:设备树配置。上图中MX6UL_PAD_UART1_CTS_B原创 2021-07-18 23:55:54 · 268 阅读 · 1 评论 -
走马观花: Linux 系统调用 open 七日游(一)
系统调用open转载 2020-08-19 22:43:54 · 128 阅读 · 0 评论 -
input输入子系统
input输入子系统转载 2020-08-19 17:42:08 · 135 阅读 · 0 评论 -
gcc编译链接原理及使用
1、gcc 和 arm-linux-gcc的常用选项gcc 的使用方法:gcc 【选项】 文件名gcc常用选项:-v:查看gcc 编译器的版本,显示gcc执行时的详细过程-o < file > Place the output into < file >指定输出文件名为file,这个名称不能跟源文件名同名-E Preprocess only; do not compile, assemble or link转载 2020-08-11 17:32:28 · 2101 阅读 · 0 评论 -
select-IO多路复用
Select函数在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、 accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反原创 2020-07-10 23:02:36 · 245 阅读 · 0 评论 -
Unix/Linux中的read和write函数
Unix/Linux中的read和write函数文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或create返回的文件描述符表示该文件,将其作为参数传给read或write函数。write函数 write函数定义如下:#include ssize_t write(int filedes, void *buf, size_t nbytes);// 返回转载 2020-07-02 22:28:23 · 429 阅读 · 0 评论 -
Linux下串口编程
转载自串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。串口通讯指的是计算机依次以位(bit)为单位来传送数据,串行通讯使用的范围很广,在嵌入式系统开发过程中串口通讯也经常用到通讯方式之一。Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口设备转载 2020-06-24 22:35:04 · 928 阅读 · 1 评论 -
IPC进程间通信
**IPC进程间通信**1.无名管道2.有名管道3.信号4.信号量5.消息队列6.共享内存7.socket1.无名管道int pipe(int fd[]);fd[0]->读,fd[1]->写用read,write即可操作2.有名管道int mkfifo(const char *filename,mode_t mode);if(access(“管道名”,F_OK)<0)//判断管道是否存在mkfifo(“管道名”,0666)//创建管道fd = open(原创 2020-06-18 12:27:48 · 109 阅读 · 0 评论 -
wait和waitpid详解
wait和waitpid详解wait()就是得到子进程的返回码,等于就是为子进程“收尸”,否则子进程会变僵尸进程(关于僵尸和孤儿进程的区别,之前有总结过),如果父进程结束了,init进程会为僵尸进程收尸的。SIGCHLD信号处理函数:进程一章讲过用wait和waitpid函数清理僵尸进程,父进程可以阻塞等待子进程结束,也可以非阻塞地查询是否有子进程结束等待清理(也就是轮询的方式)。采用第一种方式,父进程阻塞了就不能处理自己的工作了;采用第二种方式,父进程在处理自己的工作的同时还要记得时不时地轮询一下,转载 2020-06-18 11:18:54 · 711 阅读 · 0 评论 -
嵌入式工程师C语言面试常见的0x10个问题
1、用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL要点:①#define语法的基本知识(例如:不能以分号结束、括号的使用,等等)②懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。③意识到这个表达式将使一个16位机的整型数溢出,因此要用到长整型符号L,告诉编译器这个常数是的长整型数。④如果你在你的表达转载 2020-06-13 16:03:50 · 664 阅读 · 0 评论 -
编译第一步 make xxx_defconfig
编译第一步 make xxx_defconfig转载 2020-04-30 12:05:52 · 314 阅读 · 0 评论 -
Linux i2c子系统(一) _动手写一个i2c设备驱动
Linux i2c子系统(一) _动手写一个i2c设备驱动转载 2020-03-16 14:36:00 · 104 阅读 · 0 评论 -
什么是 MIME TYPE?
什么是 MIME TYPE?转载 2020-03-07 12:49:46 · 241 阅读 · 0 评论 -
CGI实例--表单GET与POST示例
转自happyboygd (七八) :http://bbs.chinaunix.net/thread-1757580-1-1.htmlCGI实例–表单GET与POST示例CGI实例--表单GET与POST示例GET方法:做一个加法运算,需要接收两个参数文件get.c如下:#include <stdio.h>#include <stdlib.h>int ma...转载 2020-03-06 18:47:53 · 518 阅读 · 0 评论 -
Linux进程间通信:消息队列 msgget()、msgsend()、msgrcv()、msgctl()
Linux进程间通信:消息队列 msgget()、msgsend()、msgrcv()、msgctl()转载 2020-03-05 17:17:43 · 596 阅读 · 0 评论 -
select、poll、epoll之间的区别总结[整理]
select、poll、epoll之间的区别总结转载 2020-02-14 18:49:48 · 79 阅读 · 0 评论 -
Linux探究
Linux探究转载 2020-01-11 11:11:31 · 79 阅读 · 0 评论 -
Linux设备树语法详解
Linux设备树语法详解转载 2020-01-10 22:38:30 · 103 阅读 · 0 评论 -
Linux输入子系统
Linux输入子系统转载 2020-01-08 22:37:05 · 116 阅读 · 0 评论 -
linux输入子系统
linux输入子系统转载 2020-01-06 23:33:51 · 106 阅读 · 0 评论 -
dev_name和dev_set_name对设备的名字进行操作
dev_name和dev_set_name对设备的名字进行操作转载 2020-01-02 22:14:24 · 1249 阅读 · 0 评论 -
Linux - 输入子系统框架详解
Linux - 输入子系统框架详解转载 2019-12-31 14:57:22 · 135 阅读 · 0 评论 -
Linux输入子系统
Linux之输入子系统分析(详解)转载 2019-12-31 14:50:00 · 80 阅读 · 0 评论 -
从0移植uboot
Linux input子系统编程、分析与模板从0移植uboot (二) _uboot启动流程分析从0移植uboot(三) _编译最小可用uboot从0移植uboot (四) _点亮调试LED从0移植uboot(五) _实现串口输出从0移植uboot(六) _实现网络功能...转载 2019-12-30 17:29:31 · 103 阅读 · 0 评论 -
Linux设备树语法详解
Linux设备树语法详解转载 2019-12-30 16:59:57 · 118 阅读 · 0 评论 -
TFTP协议理解
TFTP协议理解转载 TFTP协议理解TFTP协议(RFC1350)http://www.ietf.org/rfc/rfc1350.txt为什么要引入TFTP?在项目中udp环境下需要进行文件传输,一种高效的文件传输。文件传输一般会想到FTP 和TFTP,但考虑限制条件,所以采用TFTP。TFTP是什么?TFTP是一种简单的文件传输协议。目标是在UDP之上上建立一个类似于FTP的但...转载 2019-12-13 23:42:30 · 1662 阅读 · 0 评论 -
tftp命令
tftp命令tftp转载 2019-12-13 23:33:29 · 214 阅读 · 0 评论 -
Linux内核分析
Linux内核分析Linux内核分析转载 2019-12-12 15:05:33 · 394 阅读 · 0 评论 -
Linux 内核编译步骤及配置详解
Linux 内核编译步骤及配置详解(https://www.cnblogs.com/xiaocen/p/3717993.html)转载 2019-12-11 14:59:41 · 307 阅读 · 0 评论 -
Linux内核编译安装过程
Linux内核编译安装过程添加链接描述转载 2019-12-11 14:55:52 · 119 阅读 · 0 评论 -
linux内核编译
linux内核编译Linux内核编译过程解析转载 2019-12-11 14:52:25 · 144 阅读 · 0 评论 -
通过镜像ISO安装gcc
如果你安装好了yum,那么在没有网络的情况下,也可以通过镜像文件安装相应软件。安装之前,需要挂载光盘。详细步骤见(https://blog.csdn.net/qq_43739582/article/details/88629975)光盘挂载成功后,直接输入命令:yum install gcc便可安装,通过yum安装软件,可以自助解决依赖关系,安装者不需手动逐个安装被依赖的文件,特别方便。在连接...原创 2019-03-18 19:44:38 · 2197 阅读 · 0 评论 -
虚拟机未联网情况下yum的安装(Linux利用ios镜像安装yum)
直接进入主题。虚拟机未连接互联网的情况下,安装yum的步骤如下:1.创建挂载点:[root@localhost ~]# mkdirt /mnt/cdrom ,/mnt/cdrom/就是创建的挂载点。挂载点的意思简单说来就是创建一个在虚拟机里边访问虚拟光盘的通道、入口。访问挂载点就相当于访问虚拟光盘,光驱用过吧,可以简单认为成已经装入光盘的光驱,点击光驱图标就可以访问光盘里边的内容。2.挂载...原创 2019-03-17 23:47:09 · 2737 阅读 · 0 评论