Linux
文章平均质量分 59
Louis___Xu
嵌入式软开 进阶中~
展开
-
QT210开发板下,通过Linux的tftp服务器下载内核方法总结
方法1:(已成功尝试)Win7主机,WMware虚拟机下Ubuntu,QT210开发板原创 2014-04-15 16:48:46 · 699 阅读 · 0 评论 -
关于内核中spinlock的一些个人理解
http://blog.chinaunix.net/uid-24227137-id-3563249.html由于2.6内核可以抢占,应该在驱动程序中使用 preempt_disable() 和 preempt_enable(),从而保护代码段不被抢占(禁止 IRQ 同时也就隐式地禁止了抢占)。preempt_disable和preempt_enable 调用。spin_lock_i转载 2015-05-10 21:09:58 · 369 阅读 · 0 评论 -
Linux内核驱动之GPIO子系统(一)GPIO的使用
ZZ http://blog.csdn.net/mirkerson/article/details/8464290一 概述 Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0~MAX_INT之间的整数标识,不能使用负数,gpio与硬件体系密切相关的,不转载 2015-05-21 13:29:03 · 735 阅读 · 0 评论 -
把GPIO 通过sysfs导出到用户空间
在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio” 方式。 首先,看看系统中有没有“/sys/class/gpio”这个文件夹。如果没有请在编译内核的时候加入 Device Drivers —> GPIO Support —>转载 2015-05-22 23:54:12 · 530 阅读 · 0 评论 -
指针函数与函数指针的区别
转自http://www.cnblogs.com/gmh915/archive/2010/06/11/1756067.html一、在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *转载 2015-09-16 19:14:02 · 228 阅读 · 0 评论 -
netlink套接字的使用
ZZ: http://blog.csdn.net/gujing001/article/details/7069419题外话netlink真的非常强大,相比系统调用,ioctl和proc来说,以前没接触过,只知道用户空间去周期性地轮询内核空间的东西,开销大而且很不灵活,netlink方便多了。作者: Kevin He on wed,2005-01-05转载 2015-10-21 10:21:47 · 555 阅读 · 0 评论 -
netlink使用小结
最近在做内核空间和用户空间的双工通信,单播可以,多播一直遇到问题,还在纠结中...找了一些好帖子来看【上】http://blog.chinaunix.net/uid-23069658-id-3400761.html【中】http://blog.chinaunix.net/uid-23069658-id-3405954.html【下】http://blog.chinaunix.net/uid-23069658-id-3409786.html经过几天的尝试,终于弄明白了,现在过来写点总结性的文字。原创 2015-10-28 14:28:39 · 1156 阅读 · 0 评论 -
dma_alloc_coherent和dma_alloc_writecombine的区分
dma_alloc_coherent 在 arm 平台上会禁止页表项中的 C (Cacheable) 域以及 B (Bufferable)域。而 dma_alloc_writecombine 只禁止 C (Cacheable) 域. C 代表是否使用高速缓冲存储器, 而 B 代表是否使用写缓冲区。这样,dma_alloc_writecombine 分配出来的内存不使用缓存,但是会使原创 2015-10-20 09:58:46 · 589 阅读 · 0 评论 -
linux 内核与用户空间通信之netlink使用方法
ZZ:http://blog.csdn.net/haomcu/article/details/7371835Linux中的进程间通信机制源自于Unix平台上的进程通信机制。Unix的两大分支AT&T Unix和BSD Unix在进程通信实现机制上的各有所不同,前者形成了运行在单个计算机上的System V IPC,后者则实现了基于socket的进程间通信机制。同时Linux也遵循IEE转载 2015-10-21 11:09:39 · 267 阅读 · 0 评论 -
Linux wait()函数
ZZ: http://blog.163.com/lqy_super/blog/static/1997510212012112953858902/#include #include pid_t wait(int *status) 进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样转载 2015-10-21 15:36:08 · 359 阅读 · 0 评论 -
对线程条件变量的理解
ZZ:http://m.blog.csdn.net/blog/yeh201111/8189517对线程中条件变量的理解: 最近在学线程,学到这个条件变量的时候,感觉很难理解。。。查阅了大量的资料,终于有所突破,现在将一些体会写下来: 不得不提的是,条件变量必须牵涉到互斥锁,这个具体为什么,在我转载的另一篇文章中介绍到,有兴趣的可以了解一下。转载 2015-10-22 09:59:53 · 694 阅读 · 0 评论 -
对pthread_join的理解
linux中的应用在Linux中,默认情况下是在一个线程被创建后,必须使用此函数对创建的线程进行资源回收,但是可以设置Threads attributes来设置当一个线程结束时,直接回收此线程所占用的系统资源,详细资料查看Threads attributes。其实在Linux中,新建的线程并不是在原先的进程中,而是系统通过一个系统调用clone()。该系统调用copy了一个和原先进转载 2015-10-22 10:50:22 · 560 阅读 · 0 评论 -
阻塞与非阻塞I/O
http://www.cnblogs.com/myblesh/articles/2367242.html还记得上篇 我们讲到的是linux中并发控制访问的手段有哪些????原子、信号量、自旋锁、互斥体。这是为了保护临界区的资源,是多个进程对共享资源的并发访问的一种处理手段。但是,在驱动程序中,我们常常为了支持用户空间对设备的灵活访问,引入了阻塞与非阻塞I/O两种不同模式。转载 2015-09-19 08:24:39 · 188 阅读 · 0 评论 -
中断处理的tasklet(小任务)机制和workqueue(工作队列)机制
http://blog.csdn.net/zhuky/article/details/5418602一、中断处理的tasklet(小任务)机制中断服务程序一般都是在中断请求关闭的条件下执行的,以避免嵌套而使中断控制复杂化。但是,中断是一个随机事件,它随时会到来,如果关中断的时间太长,CPU就不能及时响应其他的中断请求,从而造成中断的丢失。因此,Linux内核的目标就是尽可能转载 2015-09-19 09:25:31 · 300 阅读 · 0 评论 -
Linux信号(signal) 机制分析
http://www.cnblogs.com/hoys/archive/2012/08/19/2646377.html【摘要】本文分析了Linux内核对于信号的实现机制和应用层的相关处理。首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理。接着分析了内核对于信号的处理流程包括信号的触发/注册/执行及注销等。最后介绍了应用层的相关处理,主要包括信号处理函数的安装、信转载 2015-09-19 22:37:39 · 198 阅读 · 0 评论 -
RAM, SRAM ,DRAM ,SDRAM ,ROM ,PROM, EPRM, EEPROM,NAND FLASH, NOR FLASH
由字面意思就可以理解,SDRAM SRAM DRAM都可以统称RAM,random access memory的缩写,只是前面加了几个修饰词而已。SRAM:静态随机存储器,就是它不需要刷新电路,不像动态随机存储器那样,每隔一段时间就要刷新一次数据。但是他集成度比较低,不适合做容量大的内存,一般是用在处理器的缓存里面。像S3C2440的ARM9处理器里面就有4K的SRAM用来做CPU启动时用的。转载 2015-09-20 22:38:03 · 339 阅读 · 0 评论 -
git的几个小技巧
http://www.trinea.cn/dev-tools/git-skill/git的几个小技巧分享git的几个小技巧,后面会根据使用补充。目前包括git撤销本地修改、git回退到前n个版本、git多用户提交冲突解决、git 命令简化。欢迎大家补充^_*1、git撤销本地修改Java12git reset --ha转载 2015-11-13 11:49:10 · 191 阅读 · 0 评论 -
对INIT_WORK的理解
转载自: http://blog.csdn.net/meiyusong/article/details/7339854以前内核里对这个函数是这样定义的 #define INIT_WORK(_work, _func, _data),可以理解为INIT_WORK会在你定义的_work工作队列里面增加一个工作任务,该任务就是_func。_func这个任务会需要一些数据作为参数,这个参数就是通过_转载 2015-04-27 17:37:55 · 344 阅读 · 0 评论 -
bus, device, driver 三者之间的关系
转载自 http://blog.csdn.net/tynew/article/details/82067681. 总线,设备和驱动总线:一个总线是处理器和一个或多个设备之间的通道. 为设备模型的目的, 所有的设备都通过一个总线连接, 甚至当它是一个内部的虚拟的,"平台"总线。设备:设备就是连接在总线上的物理实体。设备是有功能之分的。具有相同功能的设备被归到一个类(CLA转载 2015-04-27 11:36:02 · 382 阅读 · 0 评论 -
Linux双向循环链表的实现
转自http://blog.csdn.net/yaozhenguo2006/article/details/7621551 作者写得太好了,不得不大赞!链表是一种重要的数据结构,应用的非常广泛。链表分为单向链表与双向链表,一般的实现就是在结构体中内嵌指向下一个元素的指针。例如:[cpp] view plaincopystruc转载 2015-04-27 10:56:28 · 230 阅读 · 0 评论 -
DMA-API使用总结
参考自/Documentation/DMA-API.txt1,dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag) 一般用于较大的dma一致性的buffer,而较小的buffer选择dma pool的形式;2,dma_alloc_coherent使用前一般会调用dma_原创 2015-03-19 10:48:26 · 1200 阅读 · 1 评论 -
linux内核之关于内核解压缩的过程分析
参考文献: http://blog.sina.com.cn/s/blog_9659cd4201011o4j.html内核版本:2.6.14硬件:fs2410(s3c2410) 根据有关资料表示:内核启动之初内存状态如下: 2410的datasheet 表示,内存硬件的基址是0x3000 0000 ,内核文挡表示32K(0x8000转载 2015-03-06 14:09:52 · 1875 阅读 · 2 评论 -
Linux 内核对浮点数的支持
向作者和翻译作者致敬原文:http://www.linuxsmiths.com/blog/?p=253译文:http://blog.csdn.net/batizty2001/article/details/5978847Linux Kernel and Floating PointPosted on April 25, 2010 by adminConsider t转载 2015-03-16 14:28:38 · 679 阅读 · 0 评论 -
S3C2440启动的基本原理
Nand Flash启动当S3C2440 开发板采用的是Nand Flash 启动,镜像一开始是存储在Nand Flash 中,而Nand Flash只能作为存储程序和数据之用,无法在其中运行程序,所以S3C2440 开发板启动代码中应用环境初始化这一步和上述步骤稍有不同。S3C2440 镜像文件加载和运行时的地址映射关系如下图所示:S3C2440 没有上电之前映像文件存储转载 2015-03-07 00:37:00 · 358 阅读 · 0 评论 -
通过U-Boot引导启动内核过程中使用GDB实现单步调试
a, 通过make menuconfig将需要调试的vmlinux加上debug信息, 搜索下debug_info的CONFIG位置,并打开之;b, 在U-Boot文件夹下的gdb.script中加入vmlinux文件,设置需要debug的位置xxx.c:xxx行, 具体如下:target remote 192.168.4.73:2331monitor resetload u-原创 2015-03-06 16:24:22 · 1131 阅读 · 0 评论 -
Linux 的启动流程
转载自 http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html半年前,我写了《计算机是如何启动的?》,探讨BIOS和主引导记录的作用。那篇文章不涉及操作系统,只与主板的板载程序有关。今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操作系统的启动流程。这个部分比较有意思。因为在B转载 2015-03-06 21:58:58 · 248 阅读 · 0 评论 -
Linux内核知识点总结
所有的__init函数在区段.initcall.init中还保存了一份函数指针, 在初始化时内核会通过这些函数指针调用这些__init函数指针, 并在整个初始化完成后,释放整个init区段(包括.init.text,.initcall.init等)。原创 2015-03-07 00:42:32 · 250 阅读 · 0 评论 -
ELF 格式目标文件各部分属性
我们编写的源文件(.c 或.s)经过ARM 编译器的编译生成ELF 格式的目标文件(后缀名为.o),目标文件经过ARM 连接器连接以后生成ELF 格式的映像文件(后缀名为.axf),此时的映像文件还包含一些调试信息,我们还需要通过fromelf 工具将其转换成适合在ROM 或RAM 中运行的二进制代码(后缀名为.bin),这时生成的二进制映像文件就可以被烧写入目标板的ROM 或FLASH 中,当目转载 2015-03-07 00:13:41 · 662 阅读 · 0 评论 -
ARM-Linux 软浮点运算ARM-Linux 软浮点运算
近期在做Linux的modules编译的时候,遇到了浮点运算编译modules出错,而静态编译的时候未出错的情况,在这篇文章中找到了了检测检查编译工具链是否支持软浮点运算的方法,实际测试了下发现最终vmlinux的elf程序是支持软浮点的,而单独的modules并部支持软浮点,原因在于软浮点所需要的库是静态的libgcc.a,而非动态的libgcc.o或者libgcc.so,暂时还未找到合适的解决转载 2015-03-10 14:34:15 · 596 阅读 · 0 评论 -
makefile的选项LDFLAGS和LIBS的区别
转载自http://blog.chinaunix.net/uid-26517277-id-3183882.htmlLDFLAGS是选项,LIBS是要链接的库。都是喂给ld的,只不过一个是告诉ld怎么吃,一个是告诉ld要吃什么。网上不难搜索到上面这段话。不过“告诉ld怎么吃”是什么意思呢?看看如下选项:LDFLAGS = -L/var/xxx/lib -L转载 2015-03-10 17:28:25 · 520 阅读 · 0 评论 -
Linux Kernel Makefiles英文版
Linux Kernel MakefilesThis document describes the Linux kernel Makefiles.=== Table of Contents=== 1 Overview=== 2 Who does what=== 3 The kbuild files --- 3.1 Goal definitions转载 2015-03-11 10:02:03 · 494 阅读 · 0 评论 -
Kernel Panic的debug方法小结
经常在debug kernel的时候会遇到空指针或者其他导致内核崩溃的情况,这时候dvi1_set_stream+0x274/0x3d4指出了内核崩溃的原因,但是这个偏移量无法直接确定准确的行数,今天在交叉编译工具里发现了两个很有用的工具,objdump和addr2line,在Makefile文件中加入-g选项,增加调试信息,然后用objdump来得到相应的函数地址,如这里的dvi1_set_st原创 2015-03-24 15:07:16 · 725 阅读 · 0 评论 -
直接内存访问(DMA) 总结
1. 什么是DMA直接内存访问是一种硬件机制,它允许外围设备和主内存之间直接传输它们的I/O数据,而不需要系统处理器的参与。使用这种机制可以大大提高与设备通信的吞吐量。 2. DMA数据传输有两种方式引发数据传输:第一种情况:软件对数据的请求1. 当进程调用read,驱动程序函数分配一个DMA缓冲区,并让硬件将数据传输到这个缓冲区中。进程处于睡眠状态。2. 硬件将数据写转载 2015-04-24 22:56:43 · 1603 阅读 · 0 评论 -
.o文件与.ko文件的区别
解答1:.o的文件是object文件,.ko是kernel object,与.o的区别在于其多了一些sections,比如.modinfo。.modinfo section是由kernel source里的modpost工具生成的,包括MODULE_AUTHOR, MODULE_DESCRIPTION, MODULE_LICENSE, device ID table以及模块以来关系等等转载 2015-03-16 11:07:39 · 3567 阅读 · 0 评论 -
Linux 日志级别(loglevel)详解
ZZ http://smilejay.com/2011/12/linux_loglevel/前几天,我在想printk中到底是哪些信息会打印到console上,哪些东西可以通过dmesg来查看。参考了网上一些资料以及自己做的一些实验,总结一下Linux中的console loglevel以及printk, dmesg知识。只有当printk打印信息时的loglevel小于con转载 2015-04-16 11:11:40 · 4337 阅读 · 0 评论 -
嵌入式C语言关键字volatile以及cache对数据一致性的影响
转自:http://m.blog.csdn.net/blog/a747lulu747/12423031 cache部分加入自己的一些理解1、数据一致性是一个重要的问题,它定义了不同的CPU、系统总线所有的master看到的是相同的一片内存。 2、因为cache的存在,以及编译器对某些C语言语句的优化,使得CPU对某个内存变量的修改不能立刻更新到内存,或者其他系统的master修改了内存转载 2015-04-25 23:16:33 · 1049 阅读 · 0 评论 -
走进Linux之systemd启动过程
LCTT https://linux.cn/article-5457-1.htmlLinux系统的启动方式有点复杂,而且总是有需要优化的地方。传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统)处理,而基于init的启动系统被认为有效率不足的问题,systemd是Linux系统机器的另一种启动方式,宣称弥补了以传统Linux SysV ini转载 2015-10-30 16:06:57 · 1578 阅读 · 0 评论