- 博客(37)
- 收藏
- 关注
原创 uboot基础
概念:U-Boot 是一个主要用于嵌入式系统的引导加载程序,可以支持多种不同的计算机系统结构,包括PPC、ARM、AVR32、MIPS、x86、68k、Nios与MicroBlaze。这也是一套在GNU通用公共许可证之下发布的自由软件。选择U-Boot的理由:① 开放源码;② 支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;③ 支持多个处理器系列,如Power...
2021-11-13 23:53:11 1473
原创 Linux线程(三)--- 进程与线程的区别
参考:Linux进程与线程的区别 - cnyinlinux主页 - OSCHINA - 中文开源技术交流社区
2021-10-18 22:37:47 176
原创 Linux线程(二)--- 互斥量
1. 什么是互斥锁 互斥量也称为互斥锁,用于多线程程序中同步访问。程序员给某个对象加上一把“锁”,每次只允许一个线程去访问它。如果想对代码关键部分的访问进行控制,你必须在进入这段代码之前锁定一把互斥量,在完成操作之后再打开它。2. 互斥量函数 pthread_mutex_init 初始化一个互斥量pthread_mutex_lock 给一个互斥量加锁pthread_mutex_trylock 加锁,如果失败不阻塞pthread_mutex_unlock 解锁...
2021-10-17 23:13:25 583
原创 Linux动态库设计
Linux中的静态库和动态库---这篇文章写的很清楚https://blog.csdn.net/qq_48930954/article/details/118724616制作动态库1. gcc –c mylib.c –o mylib.o2. gcc -shared -fPIC mylib.o -o libmylib.so3. 将制作好的libmylib.so 复制到/usr/lib主要参数解析-fPIC 使输出的对象模块是按照可重定位地址方式生成。加了fPIC实现真正意义上的多个...
2021-10-16 21:09:48 150
转载 把驱动程序编译进Linux内核
1. make 和 makefilemake是linux下的一个程序软件,makefile相当于针对make程序的配置文件,当我们执行make命令时,make将会在当前目录寻找Makefile文件,然后根据Makefile的配置对源文件进行编译。linux内核源代码的编译也是使用make工具和makefile,但是它在普通的C程序编译的基础上对配置和编译选项进行了扩展,这就是kbuild系统,专门用于linux的内核编译,使得linux内核的编译更加简洁而高效。2...
2021-10-16 19:02:46 752
原创 Linux驱动模块编译
1.makefile1.1.modules模块上层makefile1.2.内核模块makefile2.makefile解析2.1 定义变量:KERNELDIR内核top makefile所在路径。CURRENT_PATH模块所在的文件夹路径。ATOS_KCROSS_COMPILE定义编译工具链。ATOS_ARCH处理器类型。INCLUDE内核中应用的头文件所在的路径。EXTRA_CFLAGS表示在编译模块时,需要添加的目录。编译器会从这些目录中找到所需要的..
2021-10-14 23:13:27 1692
原创 SRAM/SDRAM/DDR/Cache
参考:正点原子《I.MX6U 嵌入式 Linux 驱动开发指南》1、RAM 与 ROMRAM:随机存储器,可以随时进行读写操作,速度很快,掉电以后数据会丢失。比如内存条、SRAM、SDRAM、DDR 等都是 RAM。RAM 一般用来保存程序数据、中间结果。ROM:只读存储器,断电信息不会丢失。从其制造工艺和功能上分,ROM有五种类型,即掩膜编程的只读存储器MROM(Mask-programmedROM)、可编程的只读存储器PROM(Programmable ROM)、可擦除可编程的只读存储器EP
2021-10-11 23:16:06 4081
原创 设备驱动中的异步通知机制
参考:正点原子《I.MX6U 嵌入式 Linux 驱动开发指南》1. 异步通知的概念在前面使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的,对于非阻塞方式来说还需要应用程序通过 poll 函数不断的轮询。最好的方式就是驱动程序能主动向应用程序发出通知,报告自己可以访问,然后应用程序在从驱动程序中读取或写入数据,类似于中断。Linux 提供了异步通知这个机制来完成此功能。异步通知的意思是:一旦设备就绪,则主动通知应用程序进行访问。这样,使用无阻塞IO...
2021-10-07 23:47:48 320
原创 Linux内核定时器
1. Linux时间管理和内核定时器1.1 内核时间管理Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、定时器。硬件定时器提供时钟源,时钟源的频率可以设置,设置好以后就周期性的产生定时中断,系统使用定时中断来计时。中断周期性产生的频率就是系统频率,也叫做节拍率(tick rate),比如 1000Hz,100Hz 等等说的就是系统节拍率。系统节拍率是可以设置的,单位是 Hz,我们在编译 Linux 内核的时候可以通过图形化界面设置系统节...
2021-10-01 23:50:28 488
原创 Linux中断
参考:《Linux驱动开发入门与实战》《正点原子:I.MX6U 嵌入式 Linux 驱动开发指南》1. 中断的概念中断是指在CPU正常运行期间,由于外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回取继续运行被暂时中断的程序。2. 中断的分类2.1 中断的宏观分类中断从宏观上可以分为两大类,即硬中断和软中断。硬中断硬中断就是由系统硬...
2021-09-25 23:53:45 581
原创 Linux杂项设备驱动
一、概念杂项设备是一种特殊的字符设备,在linux2.6之后出现,与platform虚拟总线相关。通常嵌套在 platform 总线驱动中,实现复杂的驱动。其主设备号固定为10,设备注册是用主设备号10来调用register_chrdev()来实现。调用class_create()和device_create()为每个杂项设备创建设备类和设备节点。杂项设备是对字符设备驱动的再次封装,降低了字符设备驱动的难度,同时节约了主设备号资源。二、字符设备与杂项设备实现对比1、字符设备驱动开发...
2021-09-22 22:08:32 1630
原创 设备驱动中的并发控制-完成量
参考:《Linux驱动开发入门与实战》Linux中提供了一种机制,实现一个线程发送一个信号通知另一个线程开始完成某个任务,这种机制就是完成量。完成量的目的是告诉一个线程某事件已经发生,可以在此事件基础上做你想做的另一个事件。1. 完成量的实现完成量是实现两个任务之间同步的简单方法,在内核中完成量由struct completion结构体表示。该结构体定义在include\linux\completion.h文件中,其定义如下所示:struct ...
2021-09-05 16:35:06 170
原创 设备驱动中的并发控制-信号量
与自旋锁一样,信号量也是保护临界资源的一种有效方法。Linux中提供两种信号量,一种用于内核程序中,一种用于应用程序中。这里讲的是内核程序中的信号量。只有得到信号量的进程和线程才能进入临界区,执行临界代码。当获取的信号量没有释放时,进程会将自身加入一个等待队列中去睡眠,直到拥有信号量的进程释放信号量后,处于等待队列中的那个进程才被唤醒。当进程唤醒之后,就立刻重新从睡眠的地方开始执行,又一次试图获得信号量,当获得信号量后,程序继续执行。从信号量的原理上来...
2021-09-05 16:11:33 290
原创 设备驱动中的阻塞和同步机制
1.阻塞和非阻塞1.1 阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。应用程序阻塞读取数据,如下所示:int fd;int ret = 0;int data = 0;fd = open("/dev/xxx_dev", O_RDWR); /* 阻塞方式打开 */ret = read(fd, &data, sizeof(data)); /* 读取数据 */应用程序调用 read 函数从设备中读取数据,...
2021-09-04 21:16:47 288
原创 设备驱动中的并发控制-自旋锁
在linux中提供了一些锁机制来避免竞争,引入锁的机制是因为单独的原子操作不能满足复杂的内核设计需求。Linux中一般可以认为有两种锁,一种是自旋锁,另一种是信号量。这两种锁是为了解决内核中遇到的不同问题开发的。其实现机制和应用场合有所不同。自旋锁是一种简单的并发控制机制,其是实现信号量和完成量的基础。自旋锁对资源有很好的保护作用。自旋锁的使用在linux中,自旋锁的类型为struct spinlock_t。内核提供了一系列的函数对struct spinlock_...
2021-09-02 23:48:05 637
原创 设备驱动中的并发控制-原子操作
现代操作系统有三大特性;中断处理、多任务处理、多处理器(SMP)。这些特性导致当多个进程、线程或CPU同时访问同一个资源时,可能会发生错误。为了避免这种错误,内核需要提供并发控制机制,对公共资源进行保护。1. 并发与竞争并发是指在操作系统中,同一时间段内有几个程序都处在已启动状态,且这几个程序都是在同一处理机上运行,但是任意时间点只有一个程序在处理机上运行。并发容易导致竞争问题。竞争就是两个或两个以上的进程同时访问同一资源,从而引起的错误。...
2021-09-01 23:06:36 673
原创 linux设备驱动开发基础(一)
参考:《Linux驱动开发入门与实战》设备驱动程序时计算机硬件与应用程序的接口,是软件系统与硬件系统沟通的桥梁。1. 设备驱动的分类Linux将设备分为3大类,分别是字符设备、块设备、网络设备。每一个字符设备或块设备都在/dev目录下对应一个设备文件。linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备和块设备。1.1 字符设备是指只能一个字节一个字节读写数据的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序。字符设备是面...
2021-08-30 22:54:02 579
原创 linux设备驱动开发基础(二)
参考:《Linux内核驱动开发入门与实战》1 驱动模块的组成:一个驱动模块主要由如下部分组成,如图下图所示。这是一个规范的驱动模块应该包含的结构。这些结构在图中的顺序也是在源文件中的顺序。 头文件(可选) 模块参数(可选) 模块功能函数(可选) 其他(可选) 模块加载函数(必须) 模块卸载函数(必须) 模块许可声明(必须) 1.1 头文件:...
2021-08-30 21:28:42 228
转载 linux开机自动挂载配置文件/etc/fstab
开机自动挂载如果我们想实现开机自动挂载某设备,只要修改/etc/fstab文件即可。文件挂载的配置文件:/etc/fstab查看此文件可知,每行定义一个要挂载的文件系统;其每行的格式如下:#要挂载的设备或伪文件系统 挂载点 文件系统类型 挂载选项 转储频率 自检次序#UUID=6efb8a23-bae1-427c-ab10-3caca95250b1 /boot xfs defaults 0 0proc ...
2021-07-13 23:37:05 4505
转载 tty和pts详解
今天在在使用who和ps命令的时候,出现tty1或者pts/0,因为不太懂就查了一下:使用tty命令可以查看现在使用的终端标识;使用ctrl+alt+[F1~F8]来切换操作终端使用echo “test xxx” > /dev/ttyx /dev/pts/1可以发送到相应的终端设备中。经实验证明,我在虚拟机中打开的终端的设备代号为tty1,利用secureCRT连接的设备代号为pts/0,在虚拟机中利用命令kill -INT pid可以杀死secureCRT连接的进程。echo “tes
2021-07-13 23:19:57 3688 1
原创 udev原理及使用方法
本文参考以下两篇文章结合自己的理解总结。https://blog.csdn.net/huangminilong/article/details/83782142https://blog.csdn.net/chituhuan/article/details/52383610一、udev概念:1、udev是linux kernel的设备管理器,在最新的内核版本中kernel_3.10中udev已经代替了以前devfs、hotplug等功能,意味着它要处理添加/删除硬件时,所有的用户空间行为。它能..
2021-07-11 23:01:00 5047 1
原创 inittab流程解析
Linux的启动过程主要分成两个阶段:1.启动内核。在这个阶段,内核装入内存并初始化设备驱动。2.执行程序init。装入内核并初始化设备后,运行init程序。init程序处理所有程序的启动,包括重要系统程序和其它指定在启动时装入的软件。init的进程号是1,从这一点就能看出,init进程是系统所有进程的起点。init程序需要读取配置文件/etc/inittab,以查看下一步做什么。inittab是一个不可执行的文本文件,它有若干行指令所组成,告诉 init 要进入什么运行级别,以及在哪里可以找到该运
2021-07-09 23:18:10 1130
原创 linux 启动脚本rcs解析
在inittab文件中定义系统初始化脚本: ::sysinit:/etc/init.d/rcssysinit:告诉init程序运行/etc/rc.d/rcs脚本文件来初始化系统,执行/etc/rc.d/rc3.d/目录下的所有的rc启动脚本。/etc/rc.d/rc3.d/目录中的这些启动脚本实际上都是一些链接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、st.
2021-07-09 22:46:26 2919
原创 进程间通信(四)—— 信号
参考:《UNIX环境高级编程》1、信号的概念:信号是软件中断。很多比较重要的应用程序都需处理信号。信号提供了一种处理异步事件的方法。每个信号都有一个名字,这些名字都以三个字符SIG开头;2、信号处理流程1)选择信号;2)发送信号;3)处理信号:忽略信号;交给内核处理;用户自定义处理方法;3、信号类型:Linux系统支持的所有信号均定义在 /usr/include/asm/signal.h(展示),其中常见的信号有:SIGINT:当用户按中断键(一般是DELETE或Ctrl+.
2020-10-18 16:09:19 416
原创 进程间通信(一)——共享内存
参考资料:《Linux驱动开发入门与实战》https://blog.csdn.net/ypt523/article/details/79958188一、概念 共享内存允许两个或更多进程共享一给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,所以这是最快的一种IPC。使用共享内存时要掌握的唯一窍门时多个进程之前对一给定存储区的同步访问。若服务器进程正在将数据放入共享存储区,则在它做完这一操作之前,客户进程不应当去取这些数据。通常,信号量被用来实现对共享内存访问的同步。...
2020-09-19 21:57:47 1779
原创 Linux嵌入式设备修改串口密码
参考资料:https://blog.csdn.net/screaming/article/details/53083675https://www.cnblogs.com/subo_peng/p/4882813.html一、相关概念1、在init进程启动后,进程首先执行/etc/inittab文件,inittab是一个不可执行的文本文件,它由若干行指令所组成。该文件语法下面介绍,一般包括三项内容就可以启动。其中主要的一项内容就是::sysinit:/etc/rc,目的是制定初始化要执行的脚本配置
2020-09-14 22:27:30 2314
转载 inittab详解
文章转载地址:https://blog.csdn.net/kernel_32/article/details/3860756?utm_source=blogxgwz1linux System init init进程是系统中所有进程的父进程,init进程繁衍出完成通常操作所需的子进程,这些操作包括:设置机器名、检查和安装磁盘及文件系统、启动系统日志、配置网络接口并启动网络和邮件服务,启动打印服务等。Solaris中init进程的主要任务是按照inittab文件所提供的信息创建进程,由于进...
2020-09-14 21:59:55 4801
转载 文件系统与文件---概念、存储结构、访问
参考文档:https://blog.csdn.net/github_37882837/article/details/90672881http://c.biancheng.net/view/880.htmlhttps://blog.csdn.net/qq_22613757/article/details/80853391https://www.iteye.com/topic/816268前言 网络上关于文件与文件系统的内容比较零散,这里只是搬砖。把各路大神的文章读了之后以自己理..
2020-09-12 21:22:08 1455
原创 ioctl应用详解
前言参考以下资料:linux 内核 - ioctl 函数详解https://blog.csdn.net/qq_19923217/article/details/82698787Linux设备驱动之Ioctl控制https://www.cnblogs.com/geneil/archive/2011/12/04/2275372.html概念1、ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新.
2020-09-06 23:56:53 2667 2
原创 Linux 字符设备驱动(二)---字符设备驱动开发流程及主要函数定义
参考资料: 《Linux驱动开发入门与实战》,概念及源码主要参考《Linux驱动开发入门与实战》,务求准确。同时衷心感谢其他网友的分享。大部分内容都是手敲的,错漏之处望指正,谢谢!linux设备驱动之字符设备驱动https://www.linuxprobe.com/linux-device-driver.htmlLinux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析https://blog.csdn.net/zqixiao_09/article/det...
2020-09-06 19:35:37 1044
原创 Linux 字符设备驱动(一)---cdev、file_operations、inode、file结构体详述,上层应用如何访问到底层驱动
参考资料: 《Linux驱动开发入门与实战》,概念及源码主要参考《Linux驱动开发入门与实战》,务求准确。同时衷心感谢其他网友的分享。大部分内容都是手敲的,错漏之处望指正,谢谢!linux设备驱动之字符设备驱动https://www.linuxprobe.com/linux-device-driver.htmlLinux 字符设备驱动结构(一)—— cdev 结构体、设备号相关知识解析https://blog.csdn.net/zqixiao_09/article/det...
2020-09-06 18:33:44 2462
原创 Linux标准IO与文件IO的区别与联系
前言: 本文主要内容是从网上摘录的,将查到的零散信息消化后归纳在一起,方便以后查阅。 参考以下文章,谢谢作者的分享: Linux探秘之I/O效率 https://cloud.tencent.com/developer/article/1018033 linux系统编程之基础必备(四):C 标准库IO缓冲区和内核缓冲区的区别 https://cloud.tencent.com/developer/article/10...
2020-08-30 19:20:47 1475
原创 文件I/O总结
前言不积硅步无以至千里,不积小流无以成江河。继续。。。一、概念: 文件I/O被称为不带缓冲的I/O,指的是每个read和write都是调用内核中的一个系统调用。这些不带缓冲的文件I/O函数不是ISO C的组成部分。它们是POSIX.1和Single UNIX Specification的组成部分。 不带缓冲的文件I/O函数常用的有:open、read、write、lseek、close。 1、关于系统调用 系统调用,英文名system c...
2020-08-30 17:58:26 950
原创 标准I/O库总结
前言不积硅步无以至千里,不积小流无以成江河。工作中遇到的一些小问题,隐藏的BUG往往都是一些小知识点掌握的不全面导致的。还是很有必要把一些常用的知识点总结一下,可以供以后查阅,提供工作效率。一、概念:1、标准I/O库在很多操作系统上都实现了此库,它由ISO C标准说明。标准I/O库是带缓存的I/O,处理了很多细节,例如缓冲区分配,以优化长度执行I/O等。这些处理使用户不必担心如何选择使用正确的块长度。这使得它便于用户使用,但是如果深入的了解I/O库函数的操作,也会带来一些问题。 ...
2020-08-29 16:31:12 1022
原创 Linux 进程总结
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言圣人曰:温故而知新可以为师矣。本文旨在把以前学习的关于linux进程相关的零碎知识串联起来,做一个系统的总结。一方面帮助自己加深理解;另一方面可以为需要的人提供一点点帮助。错漏之处望各位同仁不吝赐教,衷心感谢!提示:以下是本篇文章正文内容,下面案例可供参考一、进程的定义:1、典型的进程定义如下:..
2020-08-23 22:39:13 227
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人