![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux kernel
langren388
嵌入式
展开
-
深入理解linux互斥锁(mutex)
转载至:http://blog.csdn.net/feiyinzilgd/article/details/5816653锁机制,可以说是linux整个系统的精髓所在,linux内核都是围绕着同步在运转。在多进程和多线程编程中,锁起着极其重要的作用。我这里说的是互斥锁,其实是泛指linux中所有的锁机制。我在这里不讲如果创建锁,关于锁的创建,网上代码很多,我在这里就不多说了。我要谈一转载 2012-09-27 18:51:39 · 269 阅读 · 0 评论 -
arm汇编.LTORG
原文地址http://blog.csdn.net/yc550370460/article/details/8332185 RISC CPU是众多CPU中的一种. RISC是精简指令集的CPU. 也就是说, 它的指令系统一般都十分简洁.本文将要介绍的是RISCCPU中目前十分普遍的ARMCPU。目前很多的RISC CPU均是使用的32BIT长度的指令. 也就是每个指令长度为32BIT(注意转载 2013-06-27 19:23:06 · 363 阅读 · 0 评论 -
学习U-BOOT时遇到FP寄存器
原文地址:http://blog.sina.com.cn/s/blog_5e99b41e01013ejk.html初始化帧指针寄存器 ,就是我们熟悉的R11寄存器。一般都没有用到。通常在C程序编译过程中,所有函数的局部变量被分配在一个连续的存储区中,一般这个存储区是在堆栈中,这个连续的存储区称为这个函数的存储“帧”,它是通过一个指针访问的。不同的CPU结构、不同的编译器使用转载 2013-07-02 18:39:23 · 382 阅读 · 0 评论 -
GNU内嵌汇编 ARM版
一、格式 asm volatile (“asm code”:output:input:changed); //必须以‘;’结尾,不管有多长对C都只是一条语句 asm 内嵌汇编关键字 volatile 告诉编译器不要优化内嵌汇编,如果想优化可以不加 ANSI C规范转载 2013-07-03 16:37:10 · 193 阅读 · 0 评论 -
GCC inline前缀的实验
书本上有很多关于inline前缀的文字理解,但是能看懂就是不能形象化的理解,我个人习惯做实验,之后这样才能加深理解。inline前缀的文字描述: 编译器会把inline修饰的函数的汇编代码复制到调用点, 而不是使用普通的调用方式, 以提高效率! inline是对编译器的建议,不是对编译器的命令。因为,不是所有的代码段都可以被展开,更不是所有的代码段都适宜被展开。有些太复杂的函数是不会原创 2013-07-03 19:34:06 · 321 阅读 · 0 评论 -
_attribute_((packed))
_attribute_((packed))1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关,gcc编译器不是紧凑模式的,我在windows下,用vc的编译器也不是紧凑的,用tc的编译器就是紧凑的。例如:在TC下:struct my{ cha转载 2013-07-04 17:44:31 · 225 阅读 · 0 评论 -
gcc volatile关键字作用-实验
volatile的本意是“易变的” 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;如果不使用valatile,则编译原创 2013-07-04 18:37:24 · 435 阅读 · 0 评论 -
总结:S3C2440开发板中SDRAM \NOR FLASH\ NAND FLASH地址分配
这几天看了友善之臂的vboot的代码和s3c2440的一些spc。vboot代码中有几个地址一致让我很迷惑。* 当vboot将arm初始化ok,nand flash也初始化ok后,它就从0x60000地址开发拷贝长度0x500000长度的linux kernel了。这个0x60000我查了下,按照arm地址空间看它应该在bank0的位置,但是系统从nand启动之后,0x00000000-0x0原创 2013-07-05 15:06:51 · 550 阅读 · 0 评论 -
linux中 likely与unlikely
http://blog.csdn.net/tommy_wxie/article/details/7384641看内核时总遇到if(likely( )){}或是if(unlikely( ))这样的语句,最初不解其意,现在有所了解,所以也想介绍一下。likely() 与 unlikely()是内核(我看的是2.6.22.6版本,2.6的版本应该都有)中定义的两个宏。位于/include转载 2013-07-05 18:55:12 · 196 阅读 · 0 评论 -
arm 汇编代码中引用c函数
对于ARM体系来说,不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedure Call Standard),ATPCS主要是定义了函数呼叫时参数的传递规则以及如何从函数返回,关于ATPCS的详细内容可以查看ADS1.2 Online Books ——Developer Guide的2.1节。这篇文档要讲的是 汇编代码中对C函数调用时如何进行参转载 2013-06-28 18:28:57 · 394 阅读 · 0 评论 -
搭建交叉调试环境arm-linux-gdb与gdbserver
原文地址:http://blog.csdn.net/unbutun/article/details/6105790最近在学习ARM的汇编,但是ARM不像x86,可以很方便的调试。不过还好有虚拟机,而且还有GDB这样万能的调试器。Google了很久,又结合自己的实践,终于成功的调试了ARM的汇编,在此向对ARM嵌入式感兴趣的同学分享一下。首先说明需要的工具1.QEMU 这个模拟转载 2013-06-26 14:26:56 · 388 阅读 · 0 评论 -
Linux内核同步原语之原子操作
http://blog.csdn.net/npy_lp/article/details/7262388避免对同一数据的并发访问(通常由中断、对称多处理器、内核抢占等引起)称为同步。 ——题记 内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 原子操作确保对同一数据的“读取-修改-写入”操作在它的执行期间不会被打断,要么全转载 2012-09-27 15:24:05 · 346 阅读 · 0 评论 -
linux completion机制的理解(zigbee 串口模块)
在研究zigbee串口通讯模块的时候看到串口模块的主要结构体有一个变量:...struct completion open_done;...不明白干什么的,通过阅读代码和网上搜寻资料,整理如下:completion 机制的作用:作用: 虽然信号量可以用于实现同步,但往往可能会出现一些不好的结果。例如:当进程A分配了一个临时信号量变量,把它初始化为关闭的M原创 2012-09-27 17:51:34 · 432 阅读 · 0 评论 -
linux中tty ldiscs怎么样与驱动关联
linux中tty ldiscs如果与上下层关联,以linux2.6.24.3-rt3为例。 前不久需要将现有平台的代码结构进行调整,内容之一就是,将ttyUSB0(usb-serial)的发送数据改到ttyS1(UART2),所以就花时间整理了下这方面的内容,时间仓促不足之处多多包涵。 本人所做的项目中整个tty架构分为三成:应用层,ldisc,驱动层。之间的关系如下:原创 2012-09-14 11:23:25 · 807 阅读 · 0 评论 -
谈EXPORT_SYMBOL使用
EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的。2.6就必须用EXPORT_SYMBOL() 来导出来(因为2.6默认不到处所有的符号)。 1、EXPORT_SYMBOL的作用是什么?EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用转载 2012-09-14 10:23:18 · 276 阅读 · 0 评论 -
自旋锁
来自:http://blog.csdn.net/yunsongice/article/details/5605264加锁(locking)是一种广泛应用的同步技术。当内核控制路径必须访问共享数据结构或进入临界区时,就需要为自己获取一把“锁”。由锁机制保护的资源非常类似于限制于房间内的资源,当某人进入房间时,就把门锁上。如果内核控制路径希望访问资源,就试图获取钥匙“打开门”。当且仅当资源空闲转载 2012-10-08 13:22:41 · 412 阅读 · 0 评论 -
在linux中的likely和unlikely
在linux中判断语句经常会看到likely和unlikely,例如:if(likely(value)){}else{}简单从表面上看if(likely(value)) == if(value),if(unlikely(value)) == if(value)。也就是likely和unlikely是一样的,但是实际上执行是不同的,加likely的意识是value的值为真的可转载 2012-09-27 10:18:32 · 219 阅读 · 0 评论 -
contiki静态路由的添加和linux ipv6 双网口路由问题
今天项目遇到一个问题,现在想着比较简单,但是以前没有遇到过,现在记录下来。1. contiki静态路由添加。 根据contiki项目文件中examples\er-rest-example\static-routing.c的例子,可以分析contiki是怎么添加静态路由的。大致的思路是,哪个网段的地址是via(通过)哪个地址发送出去,发送出去后,发送的目的地址所在设备会转发。原创 2013-06-06 12:45:24 · 927 阅读 · 0 评论 -
uboot中start.s与lowlevel_init.s中绝对地址与相对地址
在看uboot的源码中,在启动阶段,有两段代码自己没有理解到位,现在记录下来。1. 在/cpu/arm920t/start.s中(部分): adr r0, _start ldr r1, _TEXT_BASE @//0x3eff8000 cmp r0, r1 blne xxxx ...2. 在原创 2013-07-09 12:07:02 · 316 阅读 · 0 评论 -
__attribute__((packed))及gnu arm汇编与c调用extern 结构体技巧
今天在看bootloader-vboot的时候发现几行非常生疏的代码,后来整理后发现是一个非常好的技巧,可以让我更好的理解c语言和编译器的工作原理。并且可以在以后的项目中借鉴。发现的代码如下: extern struct extern_test{ unsigned char rad[12]; unsigned int src;} _原创 2013-07-05 18:15:47 · 1043 阅读 · 0 评论