![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
a372048518
这个作者很懒,什么都没留下…
展开
-
ARM TTBR0,TTBR1寄存器与ARM32页表复制
一,ARM TTBR0,TTBR1寄存器;从ARMV6开始增加了TTBR1寄存器,但是在ARM32的时候,TTBR1寄存器未使用,原因如下:TTBR0和TTBR1寄存器只支持2G,1G,512M等,但是ARM32虚拟地址空间的划分比例为1:3,用户空间是3G,内核空间是1G,所以上述寄存器硬件限制无法满足这种通用配置,所以ARM32未使用TTBR1寄存器;二,ARM32页表复制ARM32...原创 2020-01-06 23:09:02 · 4348 阅读 · 0 评论 -
LDD之块设备驱动程序
一,Linux块设备子系统: 二,Linux块设备驱动程序: 1,数据结构:原创 2017-01-28 17:22:53 · 631 阅读 · 0 评论 -
对芯片总线接口分类记录
**嵌入式芯片处理器与外围设备的链接接口基本上可以归纳为三种接口:GPIO接口,协议类接口,类内存类接口;**一,GPIO总线接口是最简单的接口,每个GPIO引脚通过配置寄存器和数据寄存器两个寄存器的相应位来控制; 每个GPIO引脚电平和数据寄存器相应位的值对应:数据寄存器的相应位为0,则链接的引脚为低电平,数据寄存器的相应位为1则引脚为高电平;原创 2017-04-08 19:06:01 · 4050 阅读 · 0 评论 -
Linux Input输入驱动架构记录
Linux 输入驱动框架有三部分组成:输入设备驱动程序,输入子系统核心,输入事件驱动程序; 1,输入设备驱动程序初始化硬件设备寄存器,读取硬件信息,构造struct input_dev结构体实例,并将struct input_dev结构体实例注册到输入子系统核心;struct input_dev{ char *name; struct inp原创 2017-05-01 12:04:12 · 778 阅读 · 0 评论 -
Binder通信——用户空间C/C++层架构与Java层对接点概述
一,Java层主要通过下述API访问Binder: Binder——————————Java层Binder对象 BinderProxy——————Java层服务端Binder在客户端进程中的代理对象 IHelloService————— 业务接口 HelloService——————服务进程中业务接口实现类 BpHelloServiceProxy——服务进程业务实现类在客户端(远端)进原创 2017-07-16 14:43:23 · 2122 阅读 · 1 评论 -
U-Boot移植过程概要记录
1,移植环境: u-boot版本:u-boot-2012.04.01(包含了S3C2410 , 但是未包含S3C2440) 硬件环境: S3C2440平台2,过程: 1),首先解压缩 tar -xvf u-boot-2012.04.01.tar.bz2; 然后编译make smdk2410_config && make ,原创 2017-09-10 18:20:28 · 442 阅读 · 0 评论 -
自制简易BootLoader思路分析及实现
1,U-Boot功能分析:u-boot最终要达到的目标是把Linux内核引导起来(相当于用户空间的Shell程序启动用户进程,但是Shell不仅仅具有启动用户进程的作用) 为了实现这个最终的目标,u-boot具有以下必须的功能; Step-1: 1),设置CPU; 2),关闭Watchdog; 3),设置Clock; 4),屏蔽所有的Interrupt; 5),初始化SDRAM; 6原创 2017-08-31 16:53:55 · 1556 阅读 · 0 评论 -
用USB无线网卡在新平台全新移植并构建Linux无线网络
一,构建环境 硬件:Ralink USB无线网卡, 软件:Linux4.12.7,wpa_supplicant , dhcp 在Linux中执行lsusb查看无线网卡vendorId及productId 为 148f:3070 在 https://wikidevi.com/wiki/List_of_Wi-Fi_Device_ID原创 2017-10-12 12:35:09 · 1042 阅读 · 0 评论 -
Linux ALSA及ASOC驱动框架分析
一,ALSA及ASOC驱动层次结构如下图:alsa-lib封装了对以下声卡设备节点的访问,为用户空间应用程序开发提供了音频接口;/dev/snd/pcmC0D0p/dev/snd/pcmC0D0c... ...比较重要的接口有:alsa-soc在alsa-driver基础之上针对soc的进一步封装;alsa-driver是整个驱动的核心,包括软件架构和硬件操作;原创 2018-01-23 00:19:11 · 3705 阅读 · 0 评论 -
LDD之中断
一,Linux 中断实现: 中断注册:int request_irq(int irq,irqreturn_t (*irq_handle)(int irq,void *dev_id),int flags,char *name,void *dev_id); irq:中断号即中断线; irq_handle:中断处理例程;原创 2016-12-18 15:10:48 · 366 阅读 · 0 评论 -
LDD之数据类型
Linux内核数据类型分为三种: 1,标准C语言基本数据类型:在不同操作系统中内存空间大小不同 byte,char,short,int,long,long long unsigined char,unsigned short,unsigned int, unsigned long 2,确定大小的数据类型:内存空间大小相同,便于移植;属于Linu原创 2017-01-02 11:08:17 · 343 阅读 · 0 评论 -
LDD之内存分配
一,kmalloc内存分配介绍; void *kmalloc(size_t size, int flags); 1,参数 size参数是需要分配的连续内存(连续的虚拟页和物理页帧)空间大小,单位是字节; flags,是内存分配的标志,是下述以GFP_(get_free_page)前缀的常量值:原创 2016-12-06 00:19:28 · 327 阅读 · 0 评论 -
LDD设备访问控制
设备访问控制:1,独占方式访问,一次只能有一个进程访问设备,其他进程打开设备的时候,在open方法中均返回-EBUSY,告诉用户空间设备忙; int open(struct inode *i_node , struct file *filp){if(atomic_dec_unless_positive(&pc) && pid==current->pid){atomic_inc(原创 2016-11-06 17:12:07 · 329 阅读 · 0 评论 -
LDD时间,延时及延缓操作-时间及获取当前时间
1,如何度量时间差,如何比较时间; a,时间表示: 一> HZ,系统硬件定时器以一定的间隔周期性的产生时钟中断,这个间隔周期用HZ的值来表示,这个值是和体系结构相关的,x86体系结构中默认设置为1000,HZ被定义在linux/param.h头文件中,可以根据需要修改HZ的值,并重新编译内核; HZ值得获取,通原创 2016-11-06 18:01:49 · 410 阅读 · 0 评论 -
LDD延时
操作延时 一,长延时 1, 忙等待--通过监听jiffies值得变化 延时1s unsigned j=jiffies+1; while(time_before(jiffies , j)){cpu_relax()原创 2016-11-08 22:43:05 · 292 阅读 · 0 评论 -
LDD操作延迟(延缓)
延迟: 一,内核定时器 1,内核定时器用在延迟指定时长之后调度异步函数执行(调度异步函数在延迟指定时长之后执行); 2,内核定时器在 “软件中断”上下文中,以院子模式运行,所以就会有众多限制:1》不能访问用户空间,由于在软件中断上下文中,所以没有与用户空间进程相关的进程资源,所以无法访问用户空间;原创 2016-11-11 10:44:36 · 357 阅读 · 0 评论 -
LDD高级字符驱动程序操作-异步通知
异步通知:1,作用:对一个文件描述符能够进行无阻塞操作的时候,发送异步通知到想要的进程,如果为多个文件由于无法辨识某个文件标识符,所以需要使用poll , select ,epoll,所以异步通知是poll,select,epoll的补充技术;2,异步通知:linux内核实现,通过异步通知标志位设置是否发送异步通知,FASYNC; 当设置文件描述符的异步通知位的时候内核会调用文件描述原创 2016-10-31 23:30:19 · 315 阅读 · 0 评论 -
LDD DMA访问内存
DMA 直接内存访问,DMA是设备与内存之间不经过cpu直接传输数据的一种机制,CPU读取设备数据每次需要经过读取指令,执行指令,读取数据的过程,所以有一部分时间花费在读取指令和执行指令的过程;DMA在设备与内存之间传输数据时不需要执行指令,而且cpu在DMA传输数据的同时可以执行其他程序,极大的提高了计算机读取设备数据的能力;DMA读取数据过程需要的设备有:DMA缓冲区,具有DM原创 2016-11-28 21:20:17 · 461 阅读 · 0 评论 -
LDD之IO端口与IO内存
一,IO端口与IO内存 独立编址:处理器将IO地址在独立的IO地址空间编排(具有独立的操作指令,指令短访问速度快)——设备寄存器与设备内存被映射到IO地址空间称为IO映射; 统一编址:处理器将IO地址和主内存在一个地址空间编排(具有统一的操作指令,操作内存的指令也可以操作设备寄存器与设备内存,操作种类多,指令长访问速度慢)————设备寄存器与设备内存被映射到原创 2016-12-12 23:41:17 · 407 阅读 · 0 评论 -
LDD内存映射
1,Linux内核内存管理基础: 1》Linux系统5种地址类型:用户空间虚拟地址,物理地址,总线地址,内核逻辑地址,内核虚拟地址; 内核逻辑地址就是内核虚拟地址,内核逻辑地址通过kmalloc(标志GFP_KERNEL)分配,内核虚拟地址不一定是内核逻辑地址; 内核逻辑地址和物理地址是线性关系,之间相差固定的值;原创 2016-11-22 21:08:13 · 666 阅读 · 0 评论 -
LDD高级字符驱动程序-poll,epoll,select
1,poll,epoll,select用途基本一样,经常用在需要操作多个输入和输出流而又不阻塞与其中任何一个输入或输出流的进程中(关键在于多个,如果数量是一个作用体现不是很明显,如果文件描述符个数为一个可以使用异步通知操作); 底层都是通过 int (*poll)(struct file *filp,poll_table *table);函数来实现的。原创 2016-11-03 22:50:36 · 682 阅读 · 0 评论