自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 【Linux内核学习】 如何添加一个系统调用

总的来说, 系统调用是为了应用程序的接口的各种库在不同平台上能够共用的一种有效的机制,各种库在不同平台上提供的接口都是一致的,但是在各种系统或者平台上,这些接口的实现可能是不一样的,即,实现这些接口的系统调用可能不一样,有的可能实现成一个系统调用,也可能调用多个系统调用来实现。执行系统调用后,通过异常中断,陷入内核,传递系统调用号以及参数(正确的),执行正确的系统调用函数,并把返回值带回用户空间。

2022-08-23 21:39:26 463

原创 ioremap和mmap的区别

2.用户访问设备,最终其实涉及的用户和硬件,而read,write,ioctl本身会牵扯到内核,所以这些函数涉及2次的数据拷贝,用户要直接去访问硬件设备,只需要将硬件设备的物理地址信息映射到用户的虚拟地址空间即可,一旦完毕,不会在牵扯到内核空间,以后用户直接访问用户的虚拟地址就是在访问设备硬件,由2次的数据拷贝的转换为一次的数据拷贝。间的数据拷贝,如果设备拷贝的数据量比较小,那么read,write,ioctl的两次数据拷贝的过程对系统的影响几乎可以忽略不计,如果设备的数据量非常大,例如显卡(独立),...

2022-07-26 22:29:59 1564

原创 内核中内存映射时两种建立页表的方法

vma在有两种建立页表的方法,使用remap_pfn_range函数一次全部建立,或者通过nopateVMA方法每次建立一个页表。

2022-07-22 21:36:20 522

原创 内存 段 页 段页式 学习记录

为了在多进程环境下,使得进程之间的内存地址不受影响,相互隔离,于是操作系统就为每个进程独立分配一套的虚拟地址空间,每个程序只关心自己的虚拟地址就可以,实际上大家的虚拟地址都是一样的,但分布到物理地址内存是不一样的。每个进程都有自己的虚拟空间,而物理内存只有一个,所以当启用了大量的进程,物理内存必然会很紧张,于是操作系统会通过内存交换技术,把不常使用的内存暂时存放到硬盘(换出),在需要的时候再装载回物理内存(换入)。不同的段是有不同的属性的,所以就用分段(Segmentation)的形式把这些段分离出来。..

2022-07-20 21:12:37 226

原创 Input子系统使用

​当我们向Linux内核注册好input_dev以后还不能高枕无忧的使用input设备,input设备都是具有输入功能的,但是具体是什么样的输入值Linux内核是不知道的,我们需要获取到具体的输入值,或者说是输入事件,然后将输入事件上报给Linux内核。​input_envent这个结构体非常重要,因为所有的输入设备最终都是按照input_event结构体呈现给用户的,用户应用程序可以通过input_event来获取到具体的输入事件或相关的值,比如按键值等。...

2022-07-19 16:51:46 145

原创 shell的使用及基本语法

定义变量变量名=变量值,等号两侧不能有空格(与其它语言可设空格的区别之处)。变量名一般习惯使用大写。设置变量set变量名=变量值。删除变量unset变量名=变量值。声明静态变量readonly变量名,静态变量不能用unset使用变量$变量名变量赋值简单赋值命令行赋值给变量*#使用反引号*str=`cathelloworld.sh`*#直接使用(..)格式∗os=(..)格式*os=(..)格式∗os=局部变量只在代码块或函数中可见可用。外部不可用。......

2022-07-18 21:15:45 199

原创 进程上下文,中断上下文,系统调用的理解记录

是CPU内置的容量小、但速度极快的内存。而程序计数器,则是用来存储CPU正在执行的指令位置、或者即将执行的下一条指令位置。它们都是CPU在运行任何任务前,必须的依赖环境,因此也被叫做CPU上下文切换,就是先把前一个任务的CPU上下文(也就是CPU寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。根据任务的不同,CPU的上下文切换就可以分为几个不同的场景,也就是。...

2022-07-18 21:09:17 212

原创 APUE里关于线程属性以及同步属性的记录

线程属性 同步属性的记录

2022-07-16 14:51:43 56

原创 线程特定数据的使用

线程特定数据的使用

2022-07-16 14:45:46 104

原创 APUE里关于线程属性与及同步属性的记录与理解

线程属性 及 同步属性 的一些记录

2022-07-16 14:44:27 63

原创 记录下宏的用法

宏宏的用法

2022-07-16 13:44:31 72

原创 【Linux驱动开发】基于imx6ul平台的sht30驱动开发

Linux 的i2c系统Linux 的i2c系统十分庞大,主要由3部分构成,i2c核心,i2c总线驱动,以及i2c设备驱动。i2c核心主要提供了i2c总线驱动和设备驱动的注册,注销方法,i2c通信方法(即Algorithm)上层的与具体适配器无关的代码及探测设备、检测设备地址的上层代码等。i2c总线驱动​ i2c总线驱动是对i2c硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部。​ 其主要包含i2c适配器数据结构i2c_adapter、i2c适配器的Algorit

2022-05-27 20:11:37 601 1

原创 【Linux驱动学习】 异步通知学习笔记

Comment异步通知应用程序中使用驱动中的信号处理fasync函数kill_fasync 函数应用程序队异步通知的处理驱动里的处理异步通知​ 信号类似于我们硬件上使用的“中断”,只不过信号是软件层次上的。算是在软件层次上对中断的一种模拟,驱动可以通过主动向应用程序发送信号的方式来报告自己可以访问了,应用程序获取到信号以后就可以从驱动设备中读取或者写入数据了。整个过程就相当于应用程序收到了驱动发送过来了的一个中断,然后应用程序去响应这个中断,在整个处理过程中应用程序并没有去查询驱动设备是否可以访问,一

2022-05-17 15:31:47 197

原创 【Linux 驱动学习】内核定时器的用法,及linux升级导致的改变

Comment内核升级导致的timer定时器函数变化初始化定时器timer_function 的参数变化传递参数的方式内核定时器内核定时器简介init_timeradd_timerdel_timer**del_timer_sync****mod_timer**内核升级导致的timer定时器函数变化初始化定时器原本初始化定时器 是由init_timer 和给timer 的的function 赋值。Linux升级到5.4后,这两步合并成一个函数timer_setup(struct timer_list*

2022-05-17 15:28:29 1369

原创 【Linux驱动开发】 imx6ull上led驱动程序

文章目录数据流向设备树更改pinctrl子系统gpio子系统驱动编写led_init(void)led_exit(void)设置file_operations,绑定操作数据流向用户空间打开设备。通过 inode 里的设备号在内核中找到cdev。cdev与一个file_operation绑定。将该fop 返回给每个进程空间打开的file表,填充一个file 绑定操作,并返回其索引。设备树更改设备树主要记录开发板上的设备节点信息。这里先添加自己的节点信息,并把之前使用gpio4_io16的设备状

2022-05-10 16:49:19 555

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除