![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ARM 相关
文章平均质量分 76
zzsfqiuyigui
这个作者很懒,什么都没留下…
展开
-
Arm汇编 位置无关代码 adr 指令
adr r0, _start 得到的是_start的当前执行位置,由 pc+offset 决定的 得到有效地址ldr r0, =_start 得到的是绝对的地址,链接时决定;------------------------------------------------------------------------/* 重定位Boot代码到RAM内存,将Boot代转载 2014-08-07 17:17:30 · 4064 阅读 · 0 评论 -
platform_device和platform_driver 流程简介
首先介绍一下注册一个驱动的步骤:1、定义一个platform_driver结构2、初始化这个结构,指定其probe、remove等函数,并初始化其中的driver变量3、实现其probe、remove等函数看platform_driver结构,定义于include/linux/platform_device.h文件中:struct platform_driver {转载 2012-05-18 06:53:52 · 700 阅读 · 0 评论 -
Platform Device和Platform_driver注册过程
从Linux 2.6起引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver。Linux中大部分的设备驱动,都可以使用这套机制,设备用Platform_device表示,驱动用Platform_driver进行注册。Linux platform driver机制和传统的device driver机制(通过driver_regis转载 2012-05-18 06:51:59 · 593 阅读 · 0 评论 -
Linux驱动的platform机制
最近在看SPI、I2C这样简单点的总线驱动程序,从Linux2.6起,内核引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver。现在Linux中大部分的设备驱动都可以使用这套机制,总线为platform_bus,设备用platform_device表示,驱动用platform_driver进行注册。 Linux的这种platform drive转载 2012-05-18 06:37:51 · 474 阅读 · 0 评论 -
platform_driver平台驱动注册和注销过程
在Linux操作系统中,驱动程序的加载分为两种:内核启动时自动加载和用户手动加载;硬件设备也可以采用两种方式添加到系统中:在系统启动前及系统运行时的热插拨。下面,我们以arm体系结构下的at91处理器中的I2C控制器为例,介绍一下硬件设备及相关的驱动程序是如何绑定及松绑的。1. 平台驱动注册过程1.1 at91_i2c_init()函数在文件drivers/i2c/busse转载 2012-05-18 06:59:31 · 1519 阅读 · 0 评论 -
Linux驱动程序中的platform总线详解
在设备驱动程序中经常会见到和platform相关的字段,分布在驱动程序的多个角落,这也是2.6内核中比较重要的一种机制,把它的原理弄懂了,对以后分析驱动程序很有帮助,下面简单介绍一下: 在linux2.6设备模型中,关心总线,设备,驱动这三个实体,总线将设备和驱动绑定,在系统每注册一个设备的时候,会寻找与之匹配的驱动。相反,在系统每注册一个驱动的时候,寻找与之匹配的设备,匹配是由总线来完成的转载 2012-05-18 06:25:44 · 991 阅读 · 0 评论 -
解决VI打开C文件,里面关键字都不变颜色(VIM安装)
首先安装vim编辑器$sudo apt-get install vim vim-gnome vim-tiny vim-gtk vim-nox在用户目录下建立自己的配置文件#cd ~touch一个名为.vimrc文件#touch .vimrc#vi .vimrc输入以下配置:set nocompatible 不使用vi默认键盘布局s转载 2012-04-06 23:47:56 · 13697 阅读 · 0 评论 -
谈谈linux2.6内核的驱动框架
linux支持的设备越来越多,种类越来越多,设备本身的功能也是越来越复杂,而操作系统内核必须有一种很有效的方式来管理这些设备,最起码的要控制它们的开启关闭,更进一步要控制它们进行协同工作,实际上要内核仅仅做到这些并不难,关键问题是如何与用户进行交互,那么多设备怎么以统一的方式提供给用户, 毕竟最终要控制设备的还是用户啊,在2.6内核中引出了一个叫做kobject的数据结构,它的作用和著名的list转载 2012-05-18 06:46:05 · 523 阅读 · 0 评论 -
详解Linux2.6内核中基于platform机制的驱动模型
【摘要】本文以Linux 2.6.25 内核为例,分析了基于platform总线的驱动模型。首先介绍了Platform总线的基本概念,接着介绍了platform device和platform driver的定义和加载过程,分析了其与基类device 和driver的派生关系及在此过程中面向对象的设计思想。最后以ARM S3C2440中I2C控制器为例介绍了基于platform总线的驱动开发流程。转载 2012-05-18 06:39:51 · 609 阅读 · 0 评论 -
Linux 内核实时补丁PREEMPT_RT 安装
Controlling a laser with Linux is crazy, but everyone in this room is crazy in his own way. So if you want to use Linux to control an industrial welding laser, I have no problem with your using PREEMP转载 2012-05-31 22:24:52 · 22155 阅读 · 4 评论 -
制作嵌入式linux文件系统(ramdisk,cramfs,squashfs)
一、什么是文件系统 (Filesystem);A directory structure contained within a disk drive or disk area. The total available disk space can be composed of one or more filesystems. A filesystem must be mounted bef转载 2012-04-19 23:56:23 · 1038 阅读 · 0 评论 -
u-boot-2011.06在mini2440上的移植之Nor flash支持
转载请注明出处http://blog.csdn.net/cneozhang/article/details/6693764,如有任何疑问,欢迎交流学习。源码可以到我的git仓库下载:[plain] view plaincopyprint?git clone git://github.com/cneozhang/u-boot-2011.06-cneo.git转载 2012-05-03 22:28:15 · 2068 阅读 · 0 评论 -
Shell脚本调试技术
简介: 本文全面系统地介绍了shell脚本调试技术,包括使用echo, tee, trap等命令输出关键信息,跟踪变量的值,在脚本中植入调试钩子,使用“-n”选项进行shell脚本的语法检查, 使用“-x”选项实现shell脚本逐条语句的跟踪,巧妙地利用shell的内置变量增强“-x”选项的输出信息等。 一. 前言shell编程在unix/linux世界中使用得非常转载 2012-05-03 22:22:50 · 469 阅读 · 0 评论 -
u-boot中nor flash的sector管理方式
出处:http://blog.csdn.net/cneozhang/article/details/6694405 我们通过flinfo可以看到,在u-boot中,nor flash被按照sector来管理,但是注意分清出概念,这里的sector,并非和nor flash中sector的定义一样,而是nor flash datasheet中定义的sector的倍数个,并且,在u-boot中转载 2012-05-03 22:17:48 · 2172 阅读 · 0 评论 -
__attribute__ 之weak,alias属性
__attribute__是gcc专有的,用来说明函数的属性weak 和 alias 分别是两个属性。weak 使得 dram_init_banksize 这个符号在目标文件中作为 weak symbol 而不是 global symbol。用 nm 命令查看编译 生成的目标文件可用看到 dram_init_banksize 是一个weak symbol,它前面的标记是 W。而 alias转载 2012-04-30 20:47:17 · 4605 阅读 · 0 评论 -
Boa服务器移植
Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。下面给大家介绍一下Boa服务器移植的具体操作步骤,希望能够有帮助。环境 主机:ubuntu8.10转载 2012-06-11 23:16:03 · 684 阅读 · 0 评论 -
详解likely和unlikely函数
内核源码:linux-2.6.38.8.tar.bz2 参考文档:http://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/Other-Builtins.html#Other-Builtins 在Linux内核中likely和unlikely函数有两种(只能两者选一)实现方式,它们的实现原理稍有不同,但作用是相同的,下面将结合linux-2转载 2012-06-13 23:28:41 · 8405 阅读 · 1 评论 -
ARM汇编编程基础
(一) -- ARM CPU寄存器本系列文章节选自本人所著《深入浅出嵌入式底层软件开发》。本系列文章,所需代码请从以下地址下载:http://download.csdn.net/download/scyangzhu/4602585ARM的汇编编程,本质上就是针对CPU寄存器的编程,所以我们首先要弄清楚ARM有哪些寄存器?这些寄存器都是如何使用转载 2014-08-05 23:56:24 · 9394 阅读 · 2 评论 -
ARM中断异常处理的返回的问题
因为ARM指令是三级流水线就是说取指,译指,执行时同时执行的 ,这样说吧,现在PC指向的是正在取指的地址,那么cpu正在译指的指令地址是PC-4(假设在ARM状态下,一个指令占4个字节),cpu正在执行的指令地址是PC-8.也就是说PC所指向的地址和现在所执行的指令地址相差8。当突然发生中断的时候,保存的是PC的地址原创 2014-04-10 10:01:06 · 5282 阅读 · 0 评论 -
ARM处理器 八种寻址方式
ARM处理器的八种寻址方式:前言:1.什么是寻址?数据都存在存储器中,寻址简单地说就是找到存储数据或指令的地址。存储器有很多存储单元,用于存储数据。或者说,寻址就是读取数据所在储存装置中对应地址编号中存储的内容。以存储单位寻址分为位,字,节,字,双字寻址。以功能寻址分为直接寻址,间接寻址,寄存器寻址。寻址就是为运算和执行命令。 2.什么是寻址方式?通常是指某一个CPU转载 2014-04-05 18:38:51 · 5290 阅读 · 0 评论 -
常用ARM汇编指令及ATPCS规则
在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时的初始化,进出中断时的环境保存、恢复,对性能要求非常苛刻的函数等。1、相对跳转指令: b 、 bl不同之处在于: bl 指令除了跳转之外,还将返回地址( bl的下一条指令的地址)保存在 lr 寄存器中。跳转范围:当前指令的前后32M。它们是与位置无关的指令。示例: b fun1转载 2014-04-05 19:21:13 · 808 阅读 · 0 评论 -
FP寄存器及frame pointer介绍
理论上来说,ARM的15个通用寄存器是通用的,但实际上并非如此,特别是在过程调用的过程中。PCS(Procedure Call Standard for Arm architecture)就定义了过程调用中,寄存器的特殊用途。Role in the procedure call standardr15 PC The Program Counter.r14 LR The转载 2014-04-05 19:12:23 · 5086 阅读 · 0 评论 -
USB Class Codes
SB defines class code information that is used to identify a device’s functionality and to nominally load a device driver based on that functionality. The information is contained in three bytes with转载 2014-04-19 15:20:08 · 583 阅读 · 0 评论 -
关于LDR指令的理解
之前在阅读arm的汇编代码时,碰到了adr指令,查arm的指令手册,只说该指令是采用相对地址的,但这个相对地址应该怎么理解,却没有具体说明。之后在网上以adr指令为关键字进行搜索,也没有找到进一步的知识。结果,今天在搜索android资料的时候,意外的发现了adr指令与ldr指令的不同,一下子解决了心中的问题。以adr指令与ldr指令对比作为关键字,甚至可以搜到好几篇文章,实在是......转载 2013-08-11 18:12:15 · 9684 阅读 · 0 评论 -
mini2440启动代码分析
转载地址:http://blog.chinaunix.net/uid-26435987-id-3075221.html启动代码主要是在主程序运行之前初始化系统硬件及软件的运行环境,它的主要功能包括以下的几个方面:1、建立中断向量表2、初始化系统堆栈3、应用程序执行环境初始化4、跳转至主函数第一部分 GET option.inc转载 2013-08-08 16:51:02 · 1719 阅读 · 1 评论 -
S3C2440启动代码详细注释
功能:作为C程序启动代码,配置内存、中断向量、栈,初始化C语言环境变量 大概流程: 1.定义处理器模式及各模式的堆栈指针常量用于初始化堆栈sp(R13)2.设置处理器模式3.宏定义MOV_PC_LR,作用:子程序返回4.第一次查表实现中断向量的重定向5.代码入口6.大小端判断与转换7.中断的第二次查表8.转载 2013-08-08 17:01:21 · 1233 阅读 · 0 评论 -
ARM伪指令
在 ARM 汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。 在 ARM 的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控转载 2013-08-08 16:39:31 · 659 阅读 · 0 评论 -
linux内核学习初笔记(6)uboot第二阶段我的分析
uboot第一阶段分析完毕,根据第一阶段最后的分析,程序跳转到了ram中继续执行start_armboot这个函数。下面来看看这个函数主要完成了什么功能。首先要说明一个结构体,之前提到过,叫全局数据结构体,用于保存一些全局数据,在uboot第一阶段设置栈指针时,其实就已经为这个结构体在内存中留出了空间,它的地址就是在堆的地址下方,栈的上方。全局数据结构体定义如下所示:typedef转载 2012-12-30 23:14:44 · 2487 阅读 · 0 评论 -
__asm__ __volatile__内嵌汇编用法简述
__asm__ __volatile__内嵌汇编用法简述 在阅读C/C++原码时经常会遇到内联汇编的情况,下面简要介绍下__asm__ __volatile__内嵌汇编用法。因为我们华清远见教学平台是ARM体系结构的,所以下面的示例都是用ARM汇编。带有C/C++表达式的内联汇编格式为: __asm__ __volatile__("Instruction List" : Output转载 2012-12-06 00:15:07 · 867 阅读 · 0 评论 -
uboot之start.s分析
一般来说,大家都是从start.s来分析UBOOT,但是事实是流程是从makefile中来的,也就是说是在敲入make smdk2410_config和make all后才进入start.s中,makefile在这里不做分析,韦东山的那本书有详细的说明,这里要提到的是makefile传进来的,我们在UBOOT中所设计到的LDFLAGS,这个标志确定了连接方式,其中的-T board/smd2410转载 2012-12-03 15:06:10 · 744 阅读 · 0 评论 -
uboot官方ftp下载地址
http://www.icdev.com.cn/batch.viewlink.php?itemid=1694ftp://ftp.denx.de/pub/u-boot/原创 2012-02-23 23:32:43 · 2123 阅读 · 1 评论 -
二层交换机的工作原理
二层交换机工作于数据链路层,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。数据链路层主要通过接收物理层提供的比特流服务,在相邻节点之间建立链路,对传输中可能出现的差错进行检错和纠错,向网络层提供无差错的透明传输。在数量链路层传输的基本单位为“帧(Frame)”。每一帧包括一定数量的数据和一些必要的控制信息。转载 2012-11-30 10:04:58 · 12368 阅读 · 0 评论 -
RT-Linux开发之-实现原理
RT-Linux开发之-实现原理www.diybl.com 时间 : 2008-01-08 作者:佚名 编辑:本站 点击: 264 [ 评论 ]--RT-Linux是著名的研究机构FSMLabs研发的一款实时Linux,以补丁的形式发布到Linux内核中,其中既有GPL和Free版本,也有商业版本。 它的实现方式是子内核方法,即把Linux内核作为一个新实现的转载 2012-04-28 22:43:46 · 2010 阅读 · 0 评论 -
实时Linux (RT-Linux)
摘要: 这篇文章讲述了实时Linux(RT)的基本概念。以及使用RT-Linux的硬实时。 _________________ _________________ _________________ “实时”是什么?在介绍RT-Linux之前我们有必要先来大体看一下一些有关“实时”的思想。我们说:“一个实时系统首先是一个信息系统,它的正确性不仅仅依赖于算法的逻辑转载 2012-04-28 22:47:54 · 14866 阅读 · 0 评论 -
Linux2.6所有内核下载地址
http://www.kernel.org/pub/linux/kernel/v2.6/Index of /pub/linux/kernel/v2.6Name Last modified Size Parent Directory - incr/原创 2012-04-17 00:09:50 · 30366 阅读 · 6 评论 -
UBOOT传递内核参数
1.内核参数传递内核中的参数是内核提供的,在配置内核时指定,而u-boot提供的则在u-boot启动时传递到内核取代内核提供的。u-boot的参数传递利用了三个通用寄存器R0,R1,R2。u-boot在启动的过程中把参数放到3个寄存器中,到内核启动时再把寄存器中的参数取出。一般我们需要通过u-boot/tools/目录下的mkimage制作uImage,使用bootm命令进行加载,注意go命令转载 2012-04-03 22:53:48 · 1553 阅读 · 0 评论 -
ARM板上挂载NFS文件系统
1. 开发环境主机Host:Windows XP sp3(32bit)客户机Guest:VMware 7.01上安装Debian LennyARM板Board:up-tech s3c2410 DVK1.1串口minicom使用交叉线或直连线通过交换机 2. 设置IP地址 将主机IP设为192.168.1.1,子网掩码255.255.255.0,默认网关转载 2012-03-31 23:37:30 · 1171 阅读 · 0 评论 -
嵌入式Linux开发板上NFS文件系统的使用
本文描述了在开发嵌入式linux系统时调试程序的一个方法,本文以深圳远峰的YF2410DVK为开发平台,描述在嵌入式linux下面如何使用NFS文件系统来开发调试应用程序,其它的嵌入式平台类似。 在嵌入式linux系统中,编译的环境和运行的环境不一样,所以我们需要交叉编译工具,一般是在PC上面运行交叉编译工具编译好程序,然后再烧写到目标板的flash上,对于应用程序,我们需要频繁的调试,如果转载 2012-03-31 23:36:59 · 891 阅读 · 0 评论 -
使用Busybox1.13.3制作 yaffs2根文件系统
还记得安装时在vivi中输入“loadyaffs root u”吗?这里的img文件就是根文件系统映像文件。准备工具1:mkyaffs2image用途:用来制作目标文件系统映像。工具2:busybox用途:生成目标文件系统。网上有对它的介绍。以上工具均来自友善之臂http://www.arm9.net/download.asp。交叉编译工具arm-linux-gcc4.3.2。转载 2012-03-31 23:42:31 · 657 阅读 · 0 评论 -
TFTP服务器配置
一.tftp服务器的配置1.下载tftpd32.exe2.禁用所有与本机ip(本机在局域网内设置的ip或者公网ip)不符的网络连接(比方所你装了虚拟机,虚拟机用网桥连接,可能会安装好几个虚拟连接),接着关闭本机的所有ftp服务器(以防发生冲突).3.双击tftpd32.exe,启动tftp服务器(tftpd32.exe会自动检测到本机ip,此时在server interface右边的下转载 2012-03-25 23:53:54 · 1145 阅读 · 0 评论