随笔分类 -  Linux

上一页 1 ··· 7 8 9 10 11 12 下一页
Linux 应用编程、驱动编程、内核知识、读书笔记
摘要:第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作 ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点(www.gnu.org)上下载有关规范。一. Linux汇编行结构任何汇编行都是如下结构:[:] [} @ comment[:] [} @ 注释Linux ARM 汇编中,任何以冒号结尾的标识符都被认为是一个标号,而不一定非要在一行的开始。【例1】定义一个"add"的函数,返回两个参数的和 阅读全文
posted @ 2013-09-18 11:43 摩斯电码 阅读(877) 评论(0) 推荐(0) 编辑
摘要:ARM GCC 内嵌(inline)汇编手册关于这篇文档对于基于ARM的RISC处理器,GNU C编译器提供了在C代码中内嵌汇编的功能。这种非常酷的特性提供了C代码没有的功能,比如手动优化软件关键部分的代码、使用相关的处理器指令。这里设想了读者是熟练编写ARM汇编程序读者,因为该片文档不是ARM汇编手册。同样也不是C语言手册。这篇文档假设使用的是GCC 4 的版本,但是对于早期的版本也有效。GCC asm 声明让我们以一个简单的例子开始。就像C中的声明一样,下面的声明代码可能出现在你的代码中。 /* NOP 例子 */asm("mov r0,r0");该语句的作用是将r0移 阅读全文
posted @ 2013-09-18 11:41 摩斯电码 阅读(846) 评论(0) 推荐(0) 编辑
摘要:这是来自ethernut网站的一篇文章,原文链接:http://www.ethernut.de/en/documents/arm-inline-asm.html另外,据说nut/os是个不错的开源os,对单片机以太网开发感兴趣的可以留意一下。对gcc内联汇编讲解的资料很多,主要也是基于x86架构的,讲解arm的不多。而且,这篇文章对clobber list部分讲得很仔细,包括其他文章很少讲明白的"cc",所以我就果断把它收藏了。ARM GCC Inline Assembler Cookbook About this document The GNU C compiler f 阅读全文
posted @ 2013-09-18 11:39 摩斯电码 阅读(1865) 评论(0) 推荐(0) 编辑
摘要:转自:http://blogold.chinaunix.net/u2/69404/showart_1922655.htmlARM GCC 内嵌(inline)汇编手册关于这篇文档这篇文章是本人为方便各位业界同仁而翻译,方便大家开发底层代码使用,转载请注明出处,谢谢。要是你E文功底好,本人还是建议阅读E文版的。http://www.ethernut.de/en/documents/arm-inline-asm.html对于基于ARM的RISC处理器,GNU C编译器提供了在C代码中内嵌汇编的功能。这种非常酷的特性提供了C代码没有的功能,比如手动优化软件关键部分的代码、使用相关的处理器指令。这里设 阅读全文
posted @ 2013-09-18 11:38 摩斯电码 阅读(885) 评论(0) 推荐(0) 编辑
摘要:转:http://andyhuzhill.github.io/arm/gcc/asm/2012/09/25/gcc-inline-assemly/在操作系统级的编程中,有时候,C语言并不能完全的使用硬件的功能,这时候就需要嵌入一些汇编代码来实现功能。 有两种方式可以使C语言和assemly语言一起工作,一种是两种语言分开写成两个文件,链接的时候链接成一个文件;另一种就是在C语言中嵌入汇编代码。下面简单介绍一下如何在GCC中嵌入汇编代码。GCC规定了一个内联汇编的语法,不同硬件平台上的GCC内联汇编几乎都是这样的:asm( 汇编指令列表 :输出运算符列表 :输入运算符列表 ... 阅读全文
posted @ 2013-09-18 11:37 摩斯电码 阅读(1692) 评论(0) 推荐(0) 编辑
摘要:转:http://www.cnblogs.com/taek/archive/2012/02/05/2338838.htmlGCC支持在C/C++代码中嵌入汇编代码,这些代码被称作是"GCC Inline ASM"(GCC内联汇编);一、基本内联汇编GCC中基本的内联汇编非常易懂,格式如下:__asm__ [__volatile__] ("instruction list");其中,1.__asm__:它是GCC定义的关键字asm的宏定义(#define __asm__ asm),它用来声明一个内联汇编表达式,所以,任何一个内联汇编表达式都以它开头,它是必 阅读全文
posted @ 2013-09-18 11:35 摩斯电码 阅读(633) 评论(0) 推荐(0) 编辑
摘要:转:http://smileleeboo.howbbs.com/posts/list/3127/81062.html更多文档参见:http://pan.baidu.com/s/1eQ7nd8Q 有时为了高效,有时为了直接控制硬件,有些模块我们不得不直接用汇编语言来编写,并且对外提供调用的接口,隐藏细节,这其实就是内联汇编。如何使用内联汇编?我们就以 GCC 为例,一窥其中奥秘! 一、关键字 如何让 GCC 知道代码中内嵌的汇编呢? 借助关键字!来看下面的例子: __asm__ __volatile__("hlt"); __asm__ 表示后面的代码为内嵌汇编,... 阅读全文
posted @ 2013-09-18 11:05 摩斯电码 阅读(6402) 评论(0) 推荐(1) 编辑
摘要:转:分区只是内核的概念,就是说A~B地址放内核,C~D地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等。1:在内核MTD中可以定义分区A~B,C~D。。。。。。并予以绝对的地址赋值给每个分区。我们可以来看看在内核中是怎样来对MTD进行分区的:arch\arm\plat-s3c24xx\common-smdk.cstatic struct mtd_partition smdk_default_nand_part[] = {[0] = {.name= "Boot",.size= SZ_16K,.offset= 0,},[1] = {.name= "S3 阅读全文
posted @ 2013-09-16 18:56 摩斯电码 阅读(3386) 评论(0) 推荐(0) 编辑
摘要:转:http://hi.baidu.com/fsx92/item/bdbf90d8adab409f260ae738大家都知道Unix/Linux系统是由命令驱动的。那么最基本的系统是命令行的(就是想DOS一样的界面)。X-Window-System是Unix/Linux上的图形系统,它是通过X-Server来控制硬件的。但有一些Linux的发行版在引导的时候就会在屏幕上出现图形,这时的图形是不可能由X来完成的,那是什么机制呢?答案是FrameBuffer。FrameBuffer不是一个图形系统,更不是窗口系统。它比X要低级,简单来说FrameBuffer就是一种机制的实现。这种机制是把屏幕上的 阅读全文
posted @ 2013-09-09 19:29 摩斯电码 阅读(2400) 评论(1) 推荐(0) 编辑
摘要:转载:http://blog.csdn.net/ubuntulover/article/details/7581317(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由 阅读全文
posted @ 2013-09-09 16:12 摩斯电码 阅读(1420) 评论(0) 推荐(0) 编辑
摘要:转载:http://www.cnblogs.com/zzx1045917067/archive/2012/12/19/2824552.html内核空间和用户空间是现代操作系统的两种工作模式,内核模块运行在内核空间,而用户态应 用程序运行在用户空间。它们代表不同的级别,而对系统资源具有不同的访问权限。内核模块运行在最高级别(内核态),这个级下所有的操作都受系统信任,而应 用程序运行在较低级别(用户态)。在这个级别,处理器控制着对硬件的直接访问以及对内存的非授权访问。内核态和用户态有自己的内存映射,即自己的地址空 间。处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内 阅读全文
posted @ 2013-09-09 11:02 摩斯电码 阅读(336) 评论(0) 推荐(0) 编辑
摘要:转:http://blog.chinaunix.net/uid-29025972-id-3889653.html1>异常:是指CPU内部出现的中断,即在CPU执行特定指令时出现的非法情况。同时异常也称为同步中断,因此只有在一条指令执行后才会发出中断,不可能在指令执行期间发生异常。a.产生的原因: 程序的错误产生的,编程异常通常叫做软中断(eg:除数为0) 内核必须处理的异常条件产生的(eg:缺页)产生的目的:Linux利用异常来达到两个截然不同的目的:·给进程发送一个信号以通报一个反常情况·管理硬件资源 对于第一种情况,例如,如果进程执行了一个被0除的操作,CPU则会 阅读全文
posted @ 2013-09-08 22:50 摩斯电码 阅读(9576) 评论(0) 推荐(2) 编辑
摘要:转载:http://blog.chinaunix.net/uid-28685940-id-3889916.html内核代码绝大部分使用C语言编写,只有一小部分使用汇编语言编写,例如与特定体系结构相关的代码和对性能影响很大的代码。GCC提供了内嵌汇编的功能,可以在C代码中直接内嵌汇编语言语句,大大方便了程序设计。 一、基本内嵌汇编 GCC提供了很好的内嵌汇编支持,最基本的格式是:__asm__ __volatile__(汇编语句模板); 1、__asm__ __asm__是GCC关键字asm的宏定义:#define __asm__ asm __asm__或asm用来声明一个内嵌汇编表达式,所以任 阅读全文
posted @ 2013-09-08 22:30 摩斯电码 阅读(672) 评论(0) 推荐(0) 编辑
摘要:转载:blog.chinaunix.net/uid-28685940-id-3889918.html我们对每个c或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文件首先是分散的,我们首先要考虑的如何组合起来;其次,这些.o文件存在相互调用的关系;再者,我们最后生成的bin文件是要在硬件中运行的,每一部分放在什么地址都要有仔细的说明。我觉得在写makefile的时候,最为重要的就是ld的理解,下面说说我的经验:首先,要确定我们的程序用没有用到标准的c库,或者一些系统的库文件,这些一般是在操作系统之上开发要注意的问题,这里并不多说,熟悉在Linux编程的人,基本上都会用ld命 阅读全文
posted @ 2013-09-08 22:23 摩斯电码 阅读(7061) 评论(0) 推荐(1) 编辑
摘要:内核是如何编译成的 -知其然而不知其所以然(第一篇)转载:http://blog.chinaunix.net/uid-28236237-id-3840137.htmlLinux内核有分门别类的目录,每个目录包含了不同过能的模块代码。大家一般把这个结构叫做linux代码树。树必然是一个非常恰当的比喻,枝分枝,密密麻麻,参差不穷。那编译内核的时候内核的编译系统是如何将这么多的文件编译链接起来最后形成一个可运行的镜像文件的呢。这篇文章主要从较高的层面串联出这个过程,使得我们能在头脑里形成一个内核编译的过程。内核编译系统本来就是相当复杂的,这里我们只描述编译过程,至于这个过程是如何通过Makefile 阅读全文
posted @ 2013-08-31 23:36 摩斯电码 阅读(1206) 评论(0) 推荐(0) 编辑
摘要:转载:内核镜像zImage是如何生成的内核镜像zImage是如何生成的前面两篇文章介绍了vmlinux 文件生成,这个文件必然是核心的linux内核,但是它是ELF格式的文件,其中包含了可执行的二进制指令(内核),调试信息,符号表等内容。 vmlinux的生成是编译内核的关键,但是得到的vmlinux文件是不能烧写到flash中执行的。主要的问题是,没有一个环境来加载ELF格式的文 件。而zImage则是可以加载执行的二进制代码。总的来说zImage和vmlinux的关系是:1、zImage是可可运行的二进制内核镜像2、zImage是由vmlinux处理、压缩得到的3、zImage的大小比vm 阅读全文
posted @ 2013-08-31 23:32 摩斯电码 阅读(1432) 评论(0) 推荐(0) 编辑
摘要:BusyBox 是很多标准 Linux® 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及 telnet(不过它的选项比传统的版本要少);有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。本文将探索 BusyBox 的目标,它是如何工作的,以及为什么它对于内存有限的环境来说是如此重要。BusyBox 的诞生BusyBox 最初是由 Bruce Perens 在 1996 年为 Debian GNU/Linux 安装盘编写的。其目标是在一张软盘上创建一个可引 阅读全文
posted @ 2013-08-30 13:32 摩斯电码 阅读(317) 评论(0) 推荐(0) 编辑
摘要:关于NAND flash的MTD分区与uboot中分区的理解 转自:http://blog.csdn.net/yjp19871013/article/details/6933455?=400850442 今天做内核移植,准备添加NAND flash的驱动,做到MTD分区时,想起在一本书上看到的一句话,说的是分区时每个区之间没有间隙,前一个区的结束地址是后一个区的起始地址。可是当我看我的开发板的教程时,分区如下:static struct mtd_partition smdk_default_nand_part[] = { [0] = { .name = "uboot", . 阅读全文
posted @ 2013-08-30 13:26 摩斯电码 阅读(1760) 评论(0) 推荐(0) 编辑
摘要:[root@localhost etc]# cat fstab /dev/VolGroup00/LogVol00 / ext3 defaults 1 1LABEL=/boot /boot ext3 defaults 1 2tmpfs /dev/shm tmpfs defaults 0 0devpts /dev/pts devpts gid=5,mode=620 0 0sysfs /sys sysfs defaults 0 0proc /proc proc defaults 0 0/dev/VolGroup00/LogVol01 swap swap defaults 0 0第一个数字表示:指定文 阅读全文
posted @ 2013-08-30 13:03 摩斯电码 阅读(698) 评论(0) 推荐(0) 编辑
摘要:转载:http://blog.csdn.net/iamlaosong/article/details/7085178我们有个系统每天要下载数据,为了检查下载数据是否正常,需要查看下载数据目录大小,因为每天的数据都差不多,如果变化太大就说明不正常。查看目录大小的命令是du(当然也可以查看文件大小),例如:du ems_data,就是查看ems_data目录下各子目录的大小;du,就是查看当前目录下各子目录的大小;du *,就是查看当前目录下各子目录和文件的大小。为了提高查看效果,我们需要对结果进行排序,因为du的命令结果很乱,例如:从大到小排列:du ems_data | sort -nr按目录 阅读全文
posted @ 2013-08-28 15:32 摩斯电码 阅读(410) 评论(0) 推荐(0) 编辑

上一页 1 ··· 7 8 9 10 11 12 下一页