- 博客(40)
- 资源 (44)
- 收藏
- 关注
原创 Linux 块子系统优化
一,FIO工具参数优化1.FIO关键参数介绍:平均带宽(avg bw),iops2.psync与libaio引擎的分析2.1 psync是使用同步方式,用多线程模拟同时批量给内核提交IO请求2.2 libaio采用Kernel Native AIO可以达到单次批量给内核提交IO请求的目 的,相比psync的多线程,libaio的开销更小,性能更好,更加合适评估内 核块子系统的性能3.平均带宽计算公式分析二,优化工具ftrace,blktrace,bpftraceftrace:
2021-09-01 14:22:31
3875
原创 KyOS操作系统内核
KyOS操作系统内核1,KyOS是基于个人兴趣而开发的操作系统内核雏形2,源码:gitee源码链接3,编译启动1,编译Bochs虚拟机版本:bochs-20200412使用源码中的configuration.sh中的命令编译;编译完成之后,把全部源码放入bochs源码目录, 例如:bochs-20200412目录,bochs/bochs-20200412/KyOS2,编译编译bootloader 执行,进入kernel/boot目录:./compile_boot.sh编译KyOS K
2021-02-28 16:57:17
828
1
原创 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
4569
原创 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
3840
原创 用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
1111
原创 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
476
原创 Android SurfaceFlinger VSync流程分析
一,VSync机制的作用及VSync在SurfaceFlinger服务中的位置: VSync信号通常都来自硬件控制器,在Android中也可以采用软件模拟; VSync的作用,如下图(以双缓冲为例,为了提高流畅性有时也采用triple三缓冲):LCD控制器在读取每一帧数据的开始都会产生一个VSync信号(垂直同步信号或帧同步信号);LCD的频率是60Hz,显示每一帧的间隔是16m
2017-09-08 17:33:51
2678
1
原创 自制简易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
1613
原创 Binder通信——用户空间C/C++层架构与Java层对接点概述
一,Java层主要通过下述API访问Binder: Binder——————————Java层Binder对象 BinderProxy——————Java层服务端Binder在客户端进程中的代理对象 IHelloService————— 业务接口 HelloService——————服务进程中业务接口实现类 BpHelloServiceProxy——服务进程业务实现类在客户端(远端)进
2017-07-16 14:43:23
2158
原创 Binder系统源码分析概要总结
一,Binder的作用: 1),Binder是一种IPC,是一种Client/Server模式的进程间通信机制; 优点:使用方便,性能稳定,开销很小,访问RPC和访问本地API的形式一样,让API使用者感觉不到RPC的存在,如下图:2),缺点:在双向通信方面有些不足,如果要实现双向通信,每一个进程是Client的同时也必须是Server,这样就稍显复杂; 二,Linux内核Bin
2017-06-07 23:40:47
498
原创 Linux X86 PS/2键盘驱动分析记录
1,Linux X86 PS/2 键盘驱动框架流程(以下均已Intel 8042键盘控制器为例): 1.1 设备初始化注册流程: 键盘控制器硬件驱动(i8042.c) -> 串口驱动核心(serio.c) -> 串口驱动(atkbd.c) -> 输入驱动核心(input.c) -> 输入事件驱动程序(keyboard.c) -> 虚拟控制台驱动模块;注册流程: 1.1.1,键盘控制
2017-05-07 12:18:16
1901
4
原创 Linux Input输入驱动架构记录
Linux 输入驱动框架有三部分组成:输入设备驱动程序,输入子系统核心,输入事件驱动程序; 1,输入设备驱动程序初始化硬件设备寄存器,读取硬件信息,构造struct input_dev结构体实例,并将struct input_dev结构体实例注册到输入子系统核心;struct input_dev{ char *name; struct inp
2017-05-01 12:04:12
843
原创 对芯片总线接口分类记录
**嵌入式芯片处理器与外围设备的链接接口基本上可以归纳为三种接口:GPIO接口,协议类接口,类内存类接口;**一,GPIO总线接口是最简单的接口,每个GPIO引脚通过配置寄存器和数据寄存器两个寄存器的相应位来控制; 每个GPIO引脚电平和数据寄存器相应位的值对应:数据寄存器的相应位为0,则链接的引脚为低电平,数据寄存器的相应位为1则引脚为高电平;
2017-04-08 19:06:01
4307
原创 LDD之USB设备驱动
一,USB设备规范: USB硬件层由USB设备,USB总线,USB主机控制器组成; USB驱动层由USB设备侧驱动程序,USB主机控制器驱动程序,USB核心,USB宿主机上的设备驱动程序组成; 如下图(图片来自USB规范): 二,Linux 中USB数据协议的实现: 数据结构:
2017-01-14 18:23:37
492
原创 LDD之PCI设备
一,PCI总线: 1,PCI总线是系统总线;Host-Briage(PCI总线0)——PCI设备,PCI-PCI briage ——PCI总线1 2,PCI设备信息查看及寻址方式: 3,PCI设备配置空间结构: 4,PCI设备配置空间访问: 5,Linux PCI设备结构表示:
2017-01-07 16:55:08
765
原创 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
379
原创 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
405
原创 LDD之IO端口与IO内存
一,IO端口与IO内存 独立编址:处理器将IO地址在独立的IO地址空间编排(具有独立的操作指令,指令短访问速度快)——设备寄存器与设备内存被映射到IO地址空间称为IO映射; 统一编址:处理器将IO地址和主内存在一个地址空间编排(具有统一的操作指令,操作内存的指令也可以操作设备寄存器与设备内存,操作种类多,指令长访问速度慢)————设备寄存器与设备内存被映射到
2016-12-12 23:41:17
481
原创 LDD之内存分配
一,kmalloc内存分配介绍; void *kmalloc(size_t size, int flags); 1,参数 size参数是需要分配的连续内存(连续的虚拟页和物理页帧)空间大小,单位是字节; flags,是内存分配的标志,是下述以GFP_(get_free_page)前缀的常量值:
2016-12-06 00:19:28
356
原创 LDD DMA访问内存
DMA 直接内存访问,DMA是设备与内存之间不经过cpu直接传输数据的一种机制,CPU读取设备数据每次需要经过读取指令,执行指令,读取数据的过程,所以有一部分时间花费在读取指令和执行指令的过程;DMA在设备与内存之间传输数据时不需要执行指令,而且cpu在DMA传输数据的同时可以执行其他程序,极大的提高了计算机读取设备数据的能力;DMA读取数据过程需要的设备有:DMA缓冲区,具有DM
2016-11-28 21:20:17
540
原创 LDD内存映射
1,Linux内核内存管理基础: 1》Linux系统5种地址类型:用户空间虚拟地址,物理地址,总线地址,内核逻辑地址,内核虚拟地址; 内核逻辑地址就是内核虚拟地址,内核逻辑地址通过kmalloc(标志GFP_KERNEL)分配,内核虚拟地址不一定是内核逻辑地址; 内核逻辑地址和物理地址是线性关系,之间相差固定的值;
2016-11-22 21:08:13
713
原创 LDD操作延迟(延缓)
延迟: 一,内核定时器 1,内核定时器用在延迟指定时长之后调度异步函数执行(调度异步函数在延迟指定时长之后执行); 2,内核定时器在 “软件中断”上下文中,以院子模式运行,所以就会有众多限制:1》不能访问用户空间,由于在软件中断上下文中,所以没有与用户空间进程相关的进程资源,所以无法访问用户空间;
2016-11-11 10:44:36
411
原创 LDD延时
操作延时 一,长延时 1, 忙等待--通过监听jiffies值得变化 延时1s unsigned j=jiffies+1; while(time_before(jiffies , j)){cpu_relax()
2016-11-08 22:43:05
328
原创 LDD时间,延时及延缓操作-时间及获取当前时间
1,如何度量时间差,如何比较时间; a,时间表示: 一> HZ,系统硬件定时器以一定的间隔周期性的产生时钟中断,这个间隔周期用HZ的值来表示,这个值是和体系结构相关的,x86体系结构中默认设置为1000,HZ被定义在linux/param.h头文件中,可以根据需要修改HZ的值,并重新编译内核; HZ值得获取,通
2016-11-06 18:01:49
462
原创 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
361
原创 LDD高级字符驱动程序-poll,epoll,select
1,poll,epoll,select用途基本一样,经常用在需要操作多个输入和输出流而又不阻塞与其中任何一个输入或输出流的进程中(关键在于多个,如果数量是一个作用体现不是很明显,如果文件描述符个数为一个可以使用异步通知操作); 底层都是通过 int (*poll)(struct file *filp,poll_table *table);函数来实现的。
2016-11-03 22:50:36
717
原创 LDD高级字符驱动程序操作-异步通知
异步通知:1,作用:对一个文件描述符能够进行无阻塞操作的时候,发送异步通知到想要的进程,如果为多个文件由于无法辨识某个文件标识符,所以需要使用poll , select ,epoll,所以异步通知是poll,select,epoll的补充技术;2,异步通知:linux内核实现,通过异步通知标志位设置是否发送异步通知,FASYNC; 当设置文件描述符的异步通知位的时候内核会调用文件描述
2016-10-31 23:30:19
347
转载 Win7下由于更新netframework 4.5导致vs2012报错无法打开vc的项目
Win7下由于更新netframework 4.5导致vs2012报错无法打开vc的项目分类: 工具 技巧2013-07-17 17:08 255人阅读 评论(0) 收藏 举报提示 未能正确加载 Visual C++ Package ,并让查看 C:\Users\XXXX\AppData\Roaming\Microsoft\VisualStudio\11.0\Activi
2013-08-18 01:36:27
1785
原创 软件设计中MV模式的应用
软件设计中MV模式的应用平时在基于J2EE的软件开发中,时不时的会用到Struts框架,这个框架是MVC模式的经典之作。MVC模式介绍:Model:作用是根据前台请求数据调用后台业务处理并返回处理结果;View:就是前台显示界面;Controller:控制就是联系Model和View的作用,根据某个View来找到与其相对应的Model;MVC运用的比较多的场合就是B
2012-09-07 10:14:49
1080
原创 实例关联的外键对象不为空时保存出错
例子:订单:public class Order{.......private Person person;public Person getPerson(){return person;}public void setPerson(Person person){this.person = person;}......}客户:pu
2012-05-15 10:10:34
1598
原创 MySQL float,double,decimal数据类型区别
1. 浮点数 (SINGLE,DOUBLE,FLOAT,REAL) 在计算机中是纯数字,即由二进制来表示的数字。由于规定了长度,所有是离散形的,也就是说无法准确表示定义区间内的所有实数。 如果想了解详细,则可以参考自己的《计算机原理》教材,或者搜索 IEEE 754。2. DECIMAL、NUMBER, 这个从计算机角度来看,它不是数字,是一个结构。是由字符串或者DCB编码来表示的数字。和
2012-04-24 09:44:04
4384
原创 Extjs GridPanel 显示时间
在Extjs中使用GridPanel时常常会显示时间类型的数据,有时候也需要修改,需要注意的是在store中配置时间格式的数据时一定要加上type:"date",属性,如下代码:var store = new Ext.data.SimpleStore({... ...[{name:"date",type:"date",mapping:"date"},... ...]
2012-04-11 17:53:10
822
原创 Extjs accordion布局获取激活项
如果某个panel的布局为accordion,即:var myPanel = new Ext.Panel({... ...layout:"accordion",... ...items:[... ....]});则获取激活项代码为:myPanel.layout.activeItem,获取激活项的id:myPanel.layout.activeItem.id,activi
2012-03-29 18:00:27
945
原创 android音乐播放器源码
android音乐播放器源码:截图:1,截图2:截图3:下载地址:http://download.youkuaiyun.com/detail/a372048518/3986044
2011-12-30 12:15:56
1149
3
原创 lucene全文检索的一个小BUG
lucene是一框基于java实现的,非常优秀的,开源的全文检索库,属于apache的顶级项目;里面蕴含了大量的优秀的思想,技术,架构等;这个bug是关于lucene的高亮显示的,当内容中相邻两个英文关键字中间有字符间隔的时候,高亮显示正常,当内容中相邻的两个英文关键字中间没有任何的字符间隔的时候,则将整个内容置为空,返回空,从而在需要显示的地方什么都不显示;
2011-12-22 22:08:44
509
原创 staruml表示内部类方法
用staruml表示内部类:在别的uml软件中都有明确的符号表示,如:用符号表示内部类,而在staruml中没有这样的符号,在网上搜了好久,没有找到答案,最后经过自己的亲自尝试终于找到了staruml表示内部类的方法,很简单:1,如下图:2,要在上图中的Outer类中建一个内部类Inner如下图:3,如下图:如上即可。
2011-12-20 23:51:38
8513
1
原创 tomcat bug也可以算是改进建议
在tomcat源码ExpandWar.java类源码中有这么几句代码:public static String expand(Host host, URL war, String pathname)throws IOException{...File docBase = new File(appBase, pathname); if (docBase.exis
2011-11-25 00:29:13
616
android音乐播放器
2011-12-30
Eclipse优化设置导入导出插件及源码
2011-11-28
javascript v8执行引擎源码
2011-06-14
android开源3D游戏引擎alien3D类库源码及demo源码
2011-04-30
android3D颜色隧道(openGL-ES)
2011-04-20
ExtJS3.3版本的BUG
2010-11-04
XviD应用编程接口(API)简介(v0.1)
2010-10-12
java的swt界面邮件发送软件
2009-11-29
javascript网页播放器,不用任何插件
2009-04-20
将java程序注册成系统服务
2009-04-07
java 邮件关机程序源码
2008-05-18
自制简易U-boot
2017-08-31
S3C2440 触摸屏驱动
2017-05-03
LED Linux驱动 for JZ2440
2017-04-08
WIN7变成路由器并通过手机WIFI控制WIN7关机
2013-09-08
无线路由器密码破解spoonweb2工具
2012-10-29
androidandengine3D引擎源码
2012-04-24
Hotspot VM源码
2012-02-24
jsvm2框架源码
2012-02-24
dd-wrt_public_vga.image
2012-02-23
android音乐播放器源码
2011-12-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人