自己学驱动
梦想与坚持
勤能补拙是良训,每个人生来都不是优秀的。
展开
-
自己学驱动3——ARM-THUMB子程序调用规则ATPCS
ARM-THUMB子程序调用规则ATPCS 为了使C语言程序和汇编程序之间能够互相调用,必须为子程序间的调用制定规则,在ARM处理器中,这个规则被称为ATPCS(ARM-THUMB procedure call standard:ARM-Thumb过程调用标准):ARM程序和Thumb程序中子程序调用的规则,基本的ATPCS规则包括寄存器使用规则、数据栈使用规则、参数传递规则、子程序结果转载 2014-09-29 11:20:14 · 1783 阅读 · 0 评论 -
自己学驱动17——ARM工作模式和ARM9寄存器
1.ARM体系CPU的7种工作模式 (1)用户模式(usr):ARM处理器正常的程序执行状态。 (2)快速中断模式(fiq):用于高速数据传输或通道处理。 (3)中断模式(irq):用于通用的中断处理。 (4)管理模式(svc):操作系统使用的保护模式。 (5)数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。原创 2015-02-27 11:37:42 · 3213 阅读 · 0 评论 -
自己学驱动15——Cache
1.Cache简介 同样是基于程序访问的局部性,在主存和CPU通用寄存器之间设置一个高速的、容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供CPU在一段时间内使用,这对提高系统的性能很有帮助。这个位于主存和CPU之间的高速小容量存储器称作高速缓冲器(Cache)。 启用Cache之后,CPU读取数据时,如果Cache中有这个数据的副本则直原创 2015-02-12 16:39:04 · 1198 阅读 · 0 评论 -
自己学驱动5——uboot&linux源代码目录结构
●Board:和一些已有开发板相关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。●Common:与体系结构无关的文件,实现各种命令的C文件。 ●CPU:CPU相关文件,其中的子目录都是以u-boot所支持的CPU为名,比如有子目录arm926ejs、mips、mpc8260和nios等,每个特定的子目录中都包括cpu.c和interrupt.c和s原创 2014-09-30 12:44:24 · 1349 阅读 · 0 评论 -
自己学驱动11——简单GPIO操作
1.对于GPIO的操作 对于GPIO的操作,通常是通过读写其相应的寄存器来实现的,S3C2440也是如此。比如,S3C2440的GPBCON和GPBDAT寄存器的地址分别是0x56000010和0x56000014,可以通过如下的指令让GPB5输出低电平。 #define GPBCON (*(volatile unsigned long *)0x56000010) #原创 2015-02-10 13:50:07 · 1150 阅读 · 0 评论 -
自己学驱动9——uboot代码阅读四(start_armboot函数)
前面分析过在start.S中执行完相关的一些操作之后,会跳转到C语言的部分来执行,跳转到的目标位置就是start_armboot函数,所以现在来看一下这个函数完成了一些什么工作。在这个函数的第一行定义了一个变量如下:init_fnc_t **init_fnc_ptr; 通过查找uboot源码可以得到下面的类型重定义:typedef int (init_fnc_t) (void);原创 2015-01-23 09:52:38 · 1015 阅读 · 0 评论 -
自己学驱动14——内存管理单元MMU(内存访问权限检查和TLB)
1.内存的访问权限检查 内存的访问权限检查是MMU的主要功能之一,简单地说,它就是决定一块内存是否允许读、是否允许写。这由CP15寄存器C3(域访问控制)、描述符的域(Domain)、CP15寄存器C1的R/S/A位、描述符的AP位等联合作用。 CP15寄存器C1中的A位表示是否对地址进行对齐检查,所谓对齐检查就是访问字时地址是否为4字节对齐,访问半字时地址是否2字节对齐,如果原创 2015-02-11 16:28:00 · 2427 阅读 · 0 评论 -
自己学驱动13——内存管理单元MMU(虚拟地址和物理地址)
1.MMU简介 MMU负责完成虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查。现代的多用户多进程操作系统通过MMU使得各个用户进程都拥有自己独立的地址空间:地址映射功能使得各个进程拥有"看起来"一样的地址空间,而内存访问权限的检查可以保护每个进程所使用的内存不会被其他进程所破坏。MMU增加了底层的复杂性,但是为上层程序开发提供了极大的方便。2.虚拟地址与物理地址原创 2015-02-11 15:22:32 · 2555 阅读 · 0 评论 -
自己学驱动10——arm-linux-选项
1、arm-linux-gcc选项总体选项(1)-E:预处理之后立即停止,不进行编译。(2)-S:编译后停止,不进行汇编。(3)-c:预处理、编译和汇编源文件,但是不作链接,编译器根据源文件生成obj文件。(4)-o:指定输出文件名。这个选项可以使用在预处理、编译、汇编以及连接中,需要注意的是obj文件后缀为.o,而汇编文件的后缀为.s。(5)-v:显示制作GCC工具自身时原创 2015-01-23 16:20:26 · 1024 阅读 · 0 评论 -
自己学驱动16——NAND Flash
1.NOR Flash和NAND Flash 对于Flash存储器件的可靠性需要考虑3点:位反转、坏块和可擦除次数。所有的Flash器件(包括NOR Flash和NAND Flash)都遭遇位反转的问题:由于Flash固有的电器特性,在读写数据过程中,偶然会产生一位或几位数据错误(这种概率很低),NAND Flash出现这种问题的几率远大于NOR Flash。当位反转发生在关键的代码、数原创 2015-02-26 11:05:24 · 1241 阅读 · 0 评论 -
自己学驱动12——存储控制器
1.2440的BANK 2440一共提供给外部8个BANK(BANK0~BANK7),每个BANK均为128MB的地址空间,一共1GB地址空间。2440对外引出了27根地址线ADDR0~ADDR26,这27根地址线的访问地址大小为128MB,2440对外还引出了8根片选信号nGCS0~nGCS7,对应于BANK0~BANK7,当访问BANKx的地址空间时,nGCSx引脚输出低电平,27根原创 2015-02-11 10:10:26 · 1109 阅读 · 0 评论 -
ubuntu常用命令总结
1.df命令# df -ha显示所有的档案以及分区的使用情况# df -h /dev/sda1显示sda1的磁盘使用情况# df -T显示每个分区的所属的档案系统名称,也会显示分区的格式类型(比如ext3)注:h参数表示转换为M,G等人们常用的磁盘空间单位显示2.du命令# du -h src显示src目录中各个文件(或者文件)所占用的磁盘空间# du原创 2014-06-10 14:01:30 · 1760 阅读 · 0 评论 -
自己学驱动8——uboot代码阅读三(start.S)
/* Set up the stack */stack_setup: ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */ sub r0, r0, #CFG_MALLOC_LEN /* malloc area原创 2014-11-23 18:33:05 · 1435 阅读 · 0 评论 -
自己学驱动6——uboot代码阅读一(start.S)
uboot中的start.S文件开头的这段代码:对应的反汇编的结果: 00000000 [0xea000012] b 0x50 00000004 [0xe59ff014] ldr pc,0x00000020 ; = #0x33f80140 00000008 [0xe59ff014] ldr pc,0x00000024 ; = #0x33f801a0原创 2014-09-30 16:09:19 · 1192 阅读 · 0 评论 -
自己学驱动2——ARM汇编
常用ARM汇编指令1.相对跳转指令b和blbl指令除了跳转之外,还将返回地址(bl的下一条指令的地址)保存在lr寄存器中。这两条指令的跳转范围都是当前指令的前后32MB的空间。这个32MB的来源是b和bl指令的机器码格式为:[24]:0,跳转(branch即b);1,跳转并返回连接地址(branch with link即bl)。[23:0]:一共24个bits,在计算的时候需要原创 2014-08-22 16:40:47 · 1463 阅读 · 0 评论 -
自己学驱动7——uboot代码阅读二(start.S)
#ifdef CONFIG_USE_IRQ/* IRQ stack memory (calculated at run-time) */.globl IRQ_STACK_STARTIRQ_STACK_START: .word 0x0badc0de/* IRQ stack memory (calculated at run-time) */.globl FIQ原创 2014-11-23 16:09:09 · 1288 阅读 · 0 评论 -
自己学驱动4——SourceInsight代码阅读工具
使用SourceInsight阅读Linux源码1.启动SourceInsight,启动之后因为默认环境没有支持.S汇编代码的阅读,所以需要添加对.S汇编语言的支持。添加方法:Options->Document Options->Document Type选项卡中在File filter中添加.S类型。2.新建一个SourceInsight的项目新建方法:Project->New原创 2014-09-30 11:43:42 · 2765 阅读 · 1 评论 -
自己学驱动1——基本命令和链接文件
1.安装linux虚拟机。(1)在vmvare中安装ubuntu主机。(2)安装NFS、FTP、SSH、SMABA服务等。(3)安装交叉编译工具链。(4)安装ncurses,make menuconfig会用到的一个动态库。2.代码处理的四个步骤预处理(处理宏定义等.i文件)->编译(转化为汇编)->汇编(汇编转化为机器码.o文件)->链接(生成可执行文件)。3.编译时原创 2014-08-22 16:06:08 · 1006 阅读 · 0 评论 -
自己学驱动18——中断
1.中断原理 当某个事件发生时,硬件会设置某个寄存器;CPU在执行完一个指令时,通过硬件查看这个寄存器,如果发现所关注的事件发生了,则中断当前程序流程,跳转到一个固定的地址去处理这个事件,最后返回继续执行被中断的程序。2.中断处理过程 (1)中断控制器汇集各类外设发出的中断信号,然后告诉CPU。 (2)CPU保存当前程序的运行环境(各个寄存器等),调用中断服务原创 2015-03-05 09:42:34 · 1226 阅读 · 0 评论