
Linux
文章平均质量分 72
sfrysh
嵌入式开发,本博客大部分资源来自网络,为学习交流之用,如有侵犯你您的版权,实属无心,请给本人留言,本人会及时删除。
展开
-
LINUX下的tty,console与串口
公司作一个嵌入式产品,用ARM内核,LINUX操作系统(不是uclinux)。我最近的工作是把一个原来作好的模块(用串口来通信)挂到系统上,通过串口来控制该模块的一系列工作,并要求 <br />作成单独的驱动程序(不是通过应用程序来控制)。同时也想借此熟悉LINUX下设备驱动程序的开发方法。我们买的别的公司的开发板,LINUX现在已经能 跑起来,但技术支持和文档基本没有。最近刚开始学习LINUX,算是有了一些了解,但对TTY设备、CONSOLE、串口之间的关系觉得比较混乱。这里有 几个问题请教: <br /转载 2010-08-19 22:43:00 · 1137 阅读 · 0 评论 -
Linux 下如何 做patch 和打patch
<br />1. 制作patch<br />diff -crN Component_org Component > 01_Component_xxx.patch<br />2. 打patch<br />patch -pl < ./01_Component_xxx.patch<br />3. 使用quilt 管理patch<br /># tar xvjf prj-0.1-patches.tar.bz2 Component/<br /># quilt push -a <== 打series所有补丁<br />转载 2010-09-16 19:44:00 · 2402 阅读 · 0 评论 -
device_driver结构体
<br />一、定义:<br />struct device_driver结构体被定义在/include/linux/device.h,原型是:124struct device_driver {125 const char * name;126 struct bus_type * bus;127128 struct kobjectkobj;129 struct klistklist_devices;130转载 2010-09-20 10:37:00 · 3932 阅读 · 0 评论 -
linux内核基本数据类型总结
<br />对linux内核的数据类型做一下总结。<br />下面部分内容参考了:http://book.youkuaiyun.com/bookfiles/12/100126.shtml<br />当Linux内核在体系结构差异较大的平台之间移植时,会产生与数据类型相关的问题。在编译内核时使用 -Wall -Wstrict-prototypes选项,可以避免很多错误的发生。<br />内核使用的基本数据类型主要有:<br />ØØ int 标准C语言整数类型;<br />ØØ u32转载 2010-09-08 16:25:00 · 776 阅读 · 0 评论 -
关于构造IOCTL命令的学习心得
在编写ioctl代码之前,需要选择对应不同命令的编号。为了防止对错误的设备使用正确的命令,命令号应该在系统范围内唯一,这种错误匹配并不是不会发生,程序可能发现自己正在试图对FIFO和audio等这类非串行设备输入流修改波特率,如果每一个ioctl命令都是唯一的,应用程序进行这种操作时就会得到一个EINVAL错误,而不是无意间成功地完成了意想不到的操作。 要按Linux内核的约定方法为驱动程序选择ioctl编号,应该首先看看include/asm/ioctl.h和Doucumention/ioctl-nu转载 2010-12-01 18:05:00 · 985 阅读 · 0 评论 -
I/O多路复用详解(二)
孔令春 posted @ 2009年10月15日 20:57 in 内功修行 with tags pselectpoll , 418 阅读 <br /> 2、pselect函数<br /> pselect函数是由POSIX发明的,如今许多Unix变种都支持它。 ?123456#include <sys/select.h> #include <signal.h> #include <time.h> intpselect(intmaxfdp1, fd_set *readset, fd_set *wr转载 2010-12-06 14:50:00 · 815 阅读 · 0 评论 -
inotify -- Linux 2.6 内核中的文件系统变化通知机制
<br />一、 引言<br />众所周知,Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如 hotplug、udev 和 inotify 就是这种需求催生的。Hotplug 是一种内核向用户态应用通报关于热插拔设备一些事件发生的机制,桌面系统能够利用它对设备进行有效的管理,udev 动态地维护 /dev 下的设备文件,转载 2010-12-02 19:09:00 · 660 阅读 · 0 评论 -
poll()函数的使用
<br />poll函数用于监测多个等待事件,若事件未发生,进程睡眠,放弃CPU控制权,若监测的任何一个事件发生,poll将唤醒睡眠的进程,并判断是什么等待事件发生,执行相应的操作。poll函数退出后,struct pollfd变量的所有值被清零,需要重新设置。<br />示例是使用poll函数来监测按键的输入----------------------------------------------------------------------------------------------------转载 2010-12-06 09:23:00 · 3841 阅读 · 0 评论 -
深入理解硬盘的Linux分区
<br />在学习 Linux 的过程中,安装 Linux 是每一个初学者的第一个门槛。<br /><br /> 在这个过程中间,最大的困惑莫过于给硬盘进行分区。<br /><br /> 虽然,现在各种发行版本的 Linux 已经提供了友好的图形交互界面,但是很多的人还是感觉无从下手。这其中的原因主要是不清楚 Linux 的分区规定,以及它下面最有效的分区工具― Fdisk 的使用方法。<br /><br /> 下面从这两个方面入手,来讲解这个困扰大家的问题。<br /><br /> Linux 的转载 2010-12-15 08:59:00 · 693 阅读 · 0 评论 -
解析linux根文件系统的挂载过程
------------------------------------------ 本文系本站原创,欢迎转载!转载请注明出处:http://ericxiao.cublog.cn/------------------------------------------<br />一:前言前段时间在编译kernel的时候发现rootfs挂载不上。相同的root选项设置旧版的image却可以。为了彻底解决这个问题。研究了一下rootfs的挂载过程。特总结如下,希望能给这部份知识点比较迷茫的朋友一点帮助。二:root转载 2011-03-30 12:52:00 · 947 阅读 · 0 评论 -
linux内核基本数据类型总结
<br />对linux内核的数据类型做一下总结。<br />下面部分内容参考了:http://book.youkuaiyun.com/bookfiles/12/100126.shtml<br />当Linux内核在体系结构差异较大的平台之间移植时,会产生与数据类型相关的问题。在编译内核时使用 -Wall -Wstrict-prototypes选项,可以避免很多错误的发生。<br />内核使用的基本数据类型主要有:<br />ØØ int 标准C语言整数类型;<br />ØØ u32转载 2010-09-08 16:30:00 · 927 阅读 · 0 评论 -
Linux驱动程序开发 - 设备驱动模型初探
<br />从这一章开始,我们将详细的介绍Linux的设备驱动模型。Linux设备驱动模型是一个相当复杂的系统,对于初学者来说真有些无从入手。而且更加困难的是,随着新的Linux Kernel的release,Linux的设备驱动模型总会有或大或小的变化,我们将尽量展现 Linux Kernel 的这种变化。<br /><br />早期的Linux内核(版本2.4之前)并没有实现一个统一的设备模型,设备节点的创建一般是mknod命令手动创建或利用devfs文件系统创建。早期的Linux发行版一般会采用手动创转载 2010-09-15 11:01:00 · 1616 阅读 · 1 评论 -
Linux驱动程序开发 - 设备驱动模型初探
<br />序言 <br />从这一章开始,我们将详细的介绍Linux的设备驱动模型。Linux设备驱动模型是一个相当复杂的系统,对于初学者来说真有些无从入手。而且更加困难的是,随着新的Linux Kernel的release,Linux的设备驱动模型总会有或大或小的变化,我们将尽量展现 Linux Kernel 的这种变化。<br />早期的Linux内核(版本2.4之前)并没有实现一个统一的设备模型,设备节点的创建一般是mknod命令手动创建或利用devfs文件系统创建。早期的Linux发行版一般会采用转载 2010-08-21 10:50:00 · 1055 阅读 · 0 评论 -
Linux墙上时间
<br />6.2.2 墙上时间<br />墙上时间,在系统启动过程中根据实时钟(RTC)芯片保存数据进行初始化,在系统运行期间由系统时钟维护并在合适的时刻和RTC芯片进行同步。墙上时间存储于系统核心变量xtime中,该变量记录了现实世界中的年月日格式的时间,以便内核对某些对象和事件作时间标记,如记录文件的创建时间、修改时间、上次访问时间,或者供用户进程通过系统调用来使用。<br />内核中使用struct timespec类型的变量xtime来记录墙上时间,该变量在文件src/kernel/time.c转载 2010-08-21 12:39:00 · 4280 阅读 · 0 评论 -
怎样写 Linux LCD 驱动程序
作者: 刘鹏 日期: 2008-12-27 本文分析了frame buffer 设备驱动的主要数据结构,在此基础上介绍了LCD驱动程序的开发。 基本原理通过 framebuffer ,应用程序用 mmap 把显存映射到应用程序虚拟地址空间,将要显示的数据写入这个内存空间就可以在屏幕上显示出来; 驱动程序分配系统内存作为显存;实现 file_operations 结构中的接口,为应用程序服务;实现 fb_ops 结构中的接口,控制和操作 LDC 控制器; 驱动程序将显存的起始地址和长度传给 LCD 控制器的寄转载 2010-08-23 09:21:00 · 1030 阅读 · 0 评论 -
全面的framebuffer详解
<br />一、FrameBuffer的原理<br /> FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。<br /> Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出 FrameBuffer这个设备来供用户态进程实现直接写屏。Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过 Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内转载 2010-08-30 10:11:00 · 1825 阅读 · 0 评论 -
嵌入式Linux之我行——S3C2440上LCD驱动(FrameBuffer)实例开发讲解
嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。共享资源,欢迎转载:http://hbhuanggang.cublog.cn一、开发环境主 机:VMWare--Fedora 9开发板:Mini2440--64MB Nand, Kernel:2.6.30.4编译器:arm-linux-gcc-4.3.2二、背景知识1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要转载 2010-08-30 19:14:00 · 2030 阅读 · 1 评论 -
Linux Kernel and Android 休眠与唤醒
简介休眠/唤醒在嵌入式Linux中是非常重要的部分,嵌入式设备尽可能的进入休眠状 态来延长电池的续航时间.这篇文章就详细介绍一下Linux中休眠/唤醒是如何工作 的, 还有Android中如何把这部分和Linux的机制联系起来的.国际化English Version: link中文版: link作者: zhangjiejing Date: 2010-04-07, http://www.thinksrc.com版本信息Linux Kernel: v2.6.28Android: v2.0对于休眠(suspe转载 2010-08-31 14:25:00 · 1560 阅读 · 0 评论 -
Linux 用户态与内核态的交互——netlink 篇
<br />[size=4]Linux 用户态与内核态的交互 <br />——netlink 篇[/size] <br /><br />作者:Kendo <br />2006-9-3 <br /><br />这是一篇学习笔记,主要是对《Linux 系统内核空间与用户空间通信的实现与分析》中的源码imp2的分析。其中的源码,可以到以下URL下载: <br />http://www-128.ibm.com/developerworks/cn/linux/l-netlink/imp2.tar.gz <br /><转载 2010-09-10 10:30:00 · 915 阅读 · 0 评论 -
linux内核register_chrdev_region()系列函数
<br /> 内核提供了三个函数来注册一组字符设备编号,这三个函数分别是 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()。其中,register_chrdev_region()是为提前知道<br />设备的主次设备号的设备分配设备编号。alloc_chrdev_region() 是动态分配主次设备号。register_chrdev()。是老版本的设备号注册方式,他只分配主设备号。从设备号在mknod的时候指定。<br转载 2010-09-12 17:46:00 · 1070 阅读 · 1 评论 -
Linux 2.6 字符设备驱动程序
<br />○、说明 <br />笔记适用于Linux的2.6.10以后的内核。<br />笔记以Linux Device Driver3提供的scull程序(scull目录中的main.c和scull.h)为记录主线,并以该驱动程序中的各种系统调用和函数调用流程为记录顺序。比如,module_init( )和module_exit( )为相对应的一对系统调用,一般书籍中都会放在一起讨论,但是本笔记却不会这样,而是在需要调用的时候才会涉及,因此module_init( )会放在笔记开始时,也就是刚加载mod转载 2010-09-10 09:36:00 · 736 阅读 · 0 评论 -
Linux内核Ramdisk(initrd)机制
<br />摘要:对于Linux用户来说,Ramdisk并不陌生,可是为什么需要它呢?本文对Ramdisk在内核启动过程中的作用,以及它的内部机制进行深入介绍。<br />标题 <br />initrd 和 initramfs在内核中的处理<br />临时的根目录rootfs的挂载<br />initrd的解压缩<br />老式的initrd的处理<br />cpio格式的initrd的处理<br />initrd实例分析<br />在早期的Linux系统中,一般就只有软盘或者硬盘被用来作为Linux的根文转载 2011-03-30 11:36:00 · 1578 阅读 · 0 评论 -
Linux2.6 内核的 Initrd 机制解析
<br />1.什么是 Initrd<br />initrd 的英文含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。在 linux内核启动前, boot loader 会将存储介质中的 initrd 文件加载到内存,内核启动时会在访问真正的根文件系统前先访问该内存中的 initrd 文件系统。在 boot loader 配置了 initrd 的情况下,内核启动被分成了两个阶段,第一阶段先执行 initrd 文件系统中的"某个文件",完转载 2011-03-30 12:30:00 · 631 阅读 · 0 评论 -
内核调试案例(oops错误)
<br />结合自己的实践和网上的文章,介绍手工调试内核bug的通用方法。<br />1.步骤<br />1).Collect oops output, System.map, /proc/ksyms, vmlinux, /proc/modules <br />2).Use ksymoops to interpret oops<br /> Instructions is /usr/src/linux/Documentation/oops-tracing.txt<br /> Ksymoops(8) m转载 2011-04-14 19:03:00 · 1432 阅读 · 0 评论 -
Linux内核访问外设I/O资源的方式
Author: DongasDate: 08-08-02我们知道默认外设I/O资源是不在Linux内核空间中的(如sram或硬件接口寄存器等),若需要访问该外设I/O资源,必须先将其地址映射到内核空间中来,然后才能在内核空间中访问它。Linux内核访问外设I/O内存资源的方式有两种:动态映射(ioremap)和静态映射(map_desc)。一、动态映射(ioremap)转载 2012-06-21 16:21:35 · 1049 阅读 · 0 评论 -
linux板级内存管理之-物理内存描述的两种实现方法
Linux板级内存管理之-物理内存描述的两种实现方法osboy - mcuos.com站长原创mcuos.com@gmail.com(1)物理内存的描述我们知道物理内存的描述,在linux内核里面是通过meminfo的机构体来实现的。struct membank { unsigned long start;转载 2013-08-26 11:12:49 · 1267 阅读 · 0 评论 -
Linux time subsystem 详解(1) ----概述
Linux的计时系统(Timekeeping)在ULK中有专门一章来讲,但ULK第三版是基于2.6.10的,TimeKeeping部分已经有了很大的变化,如NOHZ mode和hrtimer,在ULK中都没有涉及,本文希望能对现在的kernel的Timekeeping部分做较完整的讲述。从2.6.10到2.6.38,Timekeeping部分的变动可以参考这篇文章,里面比较详细的讲述了转载 2013-10-09 21:46:54 · 1479 阅读 · 0 评论 -
深度解析Linux根文件系统的挂载过程
在前面的文章中介绍《Linux操作系统启动过程》,而Linux系统的根文件系统(root file system)的挂载过程则是其中一个重要环节,下面这部分内容来自于网络,经整理分享如下,希望能给这部份知识点比较迷茫的朋友一点帮助。一、rootfs的种类总的来说,rootfs分为两种:虚拟rootfs和真实rootfs。现在kernel的发展趋势是将更多的功能放到用户空间完成。以保转载 2014-01-05 16:08:16 · 1120 阅读 · 0 评论 -
开源软件许可协议简介
很多软件开发者和设计者都有将自己的软件作品以开源的形式公之于众的想法。他们希望其他人也可以分享自己的作品,使用自己的作品。开源社区之所以能蓬勃发展就是因为人们有这样的愿望。开源软件如此的丰富,任何你能想到的应用领域里都能找到它们的身影。 大部分的设计人员都已经把使用开源软件和开源代码作为日常工作不可缺少的一部分了(WordPress, Drupal 和许多其它的内容管理系统都是开源软件)。转载 2014-07-05 20:29:27 · 902 阅读 · 0 评论 -
如何进行Linux Kernel 开发
如何进行Linux Kernel 开发? (Take 3)译者序:这是一篇很重要的文档,它介绍了内核开发的方方面面。这篇文档已被加入到内核源码树的Documentation文档里(名字为HOWTO),你可以在最新的内核树里找到它。尽管已经有网友翻译过这篇文档,但是我还是决定自己再翻译一遍。翻译完之后,我的感触是如果依靠翻译来进行学习,速度太慢了。以后的技术文档直接看英文,适当的做做转载 2014-11-11 16:51:28 · 1794 阅读 · 0 评论 -
制作initramfs/initrd镜像
Linux kernel在自身初始化完成之后,需要能够找到并运行第一个用户程序(这个程序通常叫做“init”程序)。用户程序存在于文件系统之中,因此,内核必须找到并挂载一个文件系统才可以成功完成系统的引导过程。在grub中提供了一个选项“root=”用来指定第一个文件系统,但随着硬件的发展,很多情况下这个文件系统也许是存放在USB设备,SCSI设备等等多种多样的设备之上,如果需要正确引转载 2015-02-07 23:02:07 · 1511 阅读 · 0 评论 -
浅析busybox查找命令和调用相应命令函数的实现流程框架
浅析busybox查找命令和调用相应命令函数的实现流程框架libbb/appletlib.c=>main=>applet_name= argv[0];//如果为符号链接,比如ln -s busybox ls,那么argv[0]就等于"ls"=>applet_name= bb_basename(applet_name);//去掉绝对路径的'/‘,返回实际找到文件名转载 2015-02-09 22:46:05 · 2411 阅读 · 0 评论 -
利用linux dd和tr命令生成特定的数据
dd if=/dev/zero bs=4096 count=1 | tr "\000" "\377" > /tmp/1.txt从zero里面读取到的数据都是0,这里利用tr命令把00转换成ff 存储在文件1.txt里面然后 可以用cat 命令吧1.txt里面的值超相关设备写入,我主要用他测试fb原创 2015-02-28 16:55:17 · 4642 阅读 · 0 评论 -
ARM Linux静态映射分析
作者:易松华,华清远见嵌入式学院讲师。在华清远见上课过程中,发现静态映射方面初学者比较难于掌握和理解,下面分析一下静态映射机制的原理并通过GPIO和USB、LCD等的静态映射作为例子来说明如何通过这种静态映射的方式访问外设资源。内核提供了一个重要的结构体struct machine_desc ,这个结构体在内核移植中起到相当重要的作用,内核通过machine_desc结构体来控制系统体系架转载 2012-06-21 14:12:23 · 919 阅读 · 0 评论 -
arm linux 启动过程
arm-linux启动过程 1. kernel运行的史前时期和内存布局 在arm平台下,zImage.bin压缩镜像是由bootloader加载到物理内存,然后跳到zImage.bin里一段程序,它专门于将被压缩的kernel解压缩到KERNEL_RAM_PADDR开始的一段内存中,接着跳进真正的kernel去执行。该kernel的执行起点是stext函数,定义于arch/arm/转载 2012-02-01 22:55:35 · 2663 阅读 · 0 评论 -
Linux内核调试 - 一般人儿我都不告诉他(一)
<br />悄悄地进入Linux内核调试(一)<br /> 本文基址:http://blog.youkuaiyun.com/cugxueyu/archive/2007/12/21/1957740.aspx<br />※ 调试工作艰苦,是内核级开发区别于用户级开发的一个显著特点。<br />※ 驾驭内核调试的能力,很大程度上取决于经验和对整个操作系统的把握。<br /> <br />一、调试前的准备<br /> 内核级bug具有行为不可靠,定义不清晰或者说很难再现的诸多特定,为内核级的bug跟踪和调试带来了很大的转载 2011-04-14 20:40:00 · 1331 阅读 · 0 评论 -
Linux内核的Oops
<br />什么是Oops?从语言学的角度说,Oops应该是一个拟声词。当出了点小事故,或者做了比较尴尬的事之后,你可以说"Oops",翻译成中国话就叫做“哎呦”。“哎呦,对不起,对不起,我真不是故意打碎您的杯子的”。看,Oops就是这个意思。<br />在Linux内核开发中的Oops是什么呢?其实,它和上面的解释也没什么本质的差别,只不过说话的主角变成了Linux。当某些比较致命的问题出现时,我们的Linux内核也会抱歉的对我们说:“哎呦(Oops),对不起,我把事情搞砸了”。Linux内核在发生ker转载 2011-04-15 14:27:00 · 1327 阅读 · 1 评论 -
ARM linux内核启动时几个关键地址
1. 内核启动地址1.1. 名词解释ZTEXTADDR解压代码运行的开始地址。没有物理地址和虚拟地址之分,因为此时MMU处于关闭状态。这个地址不一定时RAM的地址,可以是支持读写寻址的flash等存储中介。Start address of decompressor. here's no point in talking about virtual or physic转载 2011-11-06 12:31:56 · 2142 阅读 · 0 评论 -
Linux内核Makefile编译生成内核目标文件的过程
#based on v2.6.26 kernel Linux内核Makefile编译生成内核目标文件的过程直接执行make的编译过程 1.先找到入口点(入口点问题)#编译内核line502,直接执行make默认编译此项 all: vmlinux #编译模块line1037,选择编译模块的话会到这里,另外还有其他许多all:target存在,为什么默认执行al转载 2011-11-06 13:43:43 · 1220 阅读 · 0 评论 -
Linux Command Line 解析
处理模型Linux kernel 的启动包括很多组件的初始化和相关配置,这些配置参数一般是通过command line 进行配置的。在进行后续分析之前,先来理解一下command line 的处理模型: 要处理的对象是一个字符串,其中包含了各种配置信息,通常各个配置之间通过空格进行分离,每个配置的表达形式是如:param=value1,value2或者很简单就是一个rw 。那么转载 2011-11-06 22:49:18 · 1165 阅读 · 0 评论