随笔分类 -  Linux

摘要:某些Intel的FLASH芯片(如StrataFlash系列)支持多分区,也就是各个分区可以同时进行操作。应该说这是不错的特性,但是也会带来些问题。记得当初移植Linux-2.4.21,挂JFFS2文件系统的时候,经常会报一些\"Magic bitmask not found\"之类的错误,跟进去发现FLASH读出来的都是些0x80之类的数据,查看资料发现该款FLASH有分区的特性,而Linux的FLASH驱动只用一个状态变量表示整个FLASH的状态,这就会造成某个分区的实际状态和系统记录的不符,从而导致读FLASH的时候该点实际上不处在读状态。当时的解决办法是,每次读的时 阅读全文
posted @ 2011-07-05 13:40 辛勤耕耘 阅读(515) 评论(0) 推荐(0)
摘要:Ramdisk根文件系统生成在哪里?可以参考一下linux/usr/Makefile, 会调用scripts/gen_initramfs_list.sh根据变量CONFIG_INITRAMFS_SOURCE指定(定义为./root),调用usr/ gen_init_cpio工具,来生成cpio格式的压缩的根文件系统镜像initramfs_data.cpio.gz,然后链接到Kernel映像中。./usr/Makefile:initramfs:= $(CONFIG_SHELL) $(srctree)/scripts/gen_initramfs_list.sh./usr/.initramfs_da 阅读全文
posted @ 2011-05-25 15:56 辛勤耕耘 阅读(869) 评论(0) 推荐(0)
摘要:1, 顶层Makefile跟踪:找到vmlinux目标# vmlinux image - including updated kernelsymbolsvmlinux: $(vmlinux-lds) $(vmlinux-init)$(vmlinux-main) $(kallsyms.o) FORCEifdef CONFIG_HEADERS_CHECK $(Q)$(MAKE)-f $(srctree)/Makefile headers_checkendif $(callif_changed_rule,vmlinux__) $(Q)$(MAKE)-f $(srctree)/scripts/Make 阅读全文
posted @ 2011-05-25 15:47 辛勤耕耘 阅读(2640) 评论(0) 推荐(0)
摘要:基于Linux的嵌入式系统全程喂狗策略  引 言  在嵌入式系统中,为了使系统在异常情况下能自动恢复,一般都会引入看门狗电路。看门狗电路其实就是一个计数器。当看门狗启动后,计数器开始自动计数,经过一定时间计数器溢出就会对CPU产生一个复位信号使系统重启。系统正常运行时,需要在看门狗允许的时间间隔内对看门狗计数器清零也即喂狗,不让复位信号产生。  当前在带Linux操作系统的嵌入式系统中,由于Linux操作系统加载时间较长(如lO~30 s),一般都超过看门狗的时间间隔(典型值为1.6 s);而如果不采取特殊措施,则系统在Linux操作系统加载过程中复位,Linux操作系统永远无法加载成功。为了 阅读全文
posted @ 2010-12-21 17:53 辛勤耕耘 阅读(889) 评论(0) 推荐(0)
摘要:[经典]Linux内核中ioremap映射的透彻理解 几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元。 (2)内存映射方式(Memory-mapped) RISC指令系统的CPU(如ARM、PowerPC等)通常只实现一个 阅读全文
posted @ 2010-06-03 22:47 辛勤耕耘 阅读(5085) 评论(0) 推荐(2)
摘要:Vmalloc可以获得的地址在VMALLOC_START到VMALLOC_END的范围中。这两个符号在asm/pgtable.h中定义:/* include/asm/pgtable.h */#define VMALLOC_OFFSET (8*1024*1024)#define VMALLOC_START (((unsigned long)high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))…………high_memory值在这里定义:/* arch/arm/mm/init.c */void __init bootmem_init(struc 阅读全文
posted @ 2010-04-20 13:53 辛勤耕耘 阅读(6128) 评论(0) 推荐(0)
摘要:Linux驱动开发必看:详解神秘内核 (转) 本章要先浏览一下内核发出的启动信息,然后再逐个讲解一些有意思的点。 2.1 启动过程 图2-1显示了基于x86计算机Linux系统的启动顺序。第一步是BIOS从启动设备中导入主引导记录(MBR),接下来MBR中的代码查看分区表并从活动分区读取GRUB、LILO或SYSLINUX等引导装入程序,之后引导装入程序会加载压缩后的内核映像并将控制权传递给它。内... 阅读全文
posted @ 2010-04-17 12:33 辛勤耕耘 阅读(1631) 评论(0) 推荐(0)
摘要:  什么是Linux Linux是一个类UNIX内核的可以自由发布的实现版本,是一个操作系统的底层核心。几乎所有为UNIX编写的程序都可以在Linux上编译运行。 Linux是由赫尔辛基大学的Linus Torvalds开发的,期间得到了因特网上广大UNIX程序员的帮助。它最初只是受Andy Tanenbaum教授的Minix(一个小型类UNIX系统)启发而开发的个人爱好的程序,但... 阅读全文
posted @ 2009-07-31 12:16 辛勤耕耘 阅读(2499) 评论(0) 推荐(0)
摘要:守护进程也称精灵进程是生存期长的一种进程,它们常常在系统引导装入时启动,在系统管比时终止。精灵进程没有控制终端,所以它们是在后台运行的。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 所有精灵进程都以超级用户(用户ID为0... 阅读全文
posted @ 2009-06-18 16:54 辛勤耕耘 阅读(335) 评论(0) 推荐(0)
摘要:一.记录锁1.记录锁的功能 当一个进程正在读或修改文件的某个部分时,它可以阻止其他进程修改同一文件区。我们不应该从字面上去理解记录锁,实际上它应该叫“区域锁”,因为它锁定的只是文件的一个(也可能是整个文件)。这个区域用来存放多用户的共享区。2.记录锁的分类 记录锁分为共享读锁和独占写锁,前者也叫做共享锁后者也叫做排他锁。3.加锁规则 如果一个进程对共享区加了共享读锁,其他进... 阅读全文
posted @ 2009-06-18 16:53 辛勤耕耘 阅读(302) 评论(0) 推荐(0)
摘要:1.什么是Linux的终端I/O,它分为几种类型。 终端是一种字符型设备,有多种类型,通常使用tty来简称各种类型的终端设备。终端特殊设备文件一般有以下几种: 串行端口终端(/dev/ttySn) ,伪终端(/dev/pty/),控制终端(/dev/tty) ,控制台终端(/dev/ttyn, /dev/console).1. 串行端口终端(Serial Port Terminal)是使用计算机串... 阅读全文
posted @ 2009-06-18 16:46 辛勤耕耘 阅读(521) 评论(0) 推荐(0)
摘要:1、信号本质与来源信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进程有哪些事情发生了。信号机制经过POSIX实时扩展后,功能更加强大,除了基本通知功能外,还可以传... 阅读全文
posted @ 2009-06-18 16:44 辛勤耕耘 阅读(397) 评论(0) 推荐(0)
摘要:一、主要内容:1.进程如何启动和退出的(main函数,初启函数,exit函数,atexit函数)。(1).Linux创建进程的唯一方法就是利用shell的fork系统调用。(2).编译C程序时,连接器会将初启函数和main函数一起装入内存形成可执行文件,指定该初起函数为该初启函数的开始执行点。(3).初启函数负责从UNIX SHELL获得命令行参数和系统的环境变量,将它们组织成main函数需要的形... 阅读全文
posted @ 2009-06-18 16:40 辛勤耕耘 阅读(316) 评论(0) 推荐(0)
摘要:一.文件的时间对每个文件保存三个时间字段,它们是:1.名称::utime功能:修改文件的存取和修改时间头文件:#include <utime.h>#include <sys/types.h>函数原形: int utime(const char *filename,const struct utimbuf buf);参数:pathname 文件名buf 文件时间信息返回值:若... 阅读全文
posted @ 2009-06-18 16:34 辛勤耕耘 阅读(379) 评论(0) 推荐(0)
摘要:1.名称::perror功能:该函数在stderr流中输出错误信息头文件:#include <stdio.h>函数原形: void perror(const char *message)参数:message 返回值:无 如果调用perror是使用的message参数是一个空指针或者一个空字符串,则perror函数将打印与errno相对的错误信息,以及一个换行符。如果提供的messag... 阅读全文
posted @ 2009-06-18 16:29 辛勤耕耘 阅读(263) 评论(0) 推荐(0)
摘要:一、打开/关闭文件1 名称:open目标: 打开一个文件。头文件:#include <sys/types.h>#include <sys/stat.h>#include < fcntl.h>函数原形:int open(const char * pathname,int flags);int open(const char * pathname,int flags... 阅读全文
posted @ 2009-06-18 16:18 辛勤耕耘 阅读(392) 评论(0) 推荐(0)
摘要:一、什么是共享内存区共享内存区是最快的可用IPC形式。它允许多个不相关的进程去访问同一部分逻辑内存。如果需要在两个运行中的进程之间传输数据,共享内存将是一种效率极高的解决方案。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传输就不再涉及内核。这样就可以减少系统调用时间,提高程序效率。共享内存是由IPC为一个进程创建的一个特殊的地址范围,它将出现在进程的地址空间中。其他进程可以把同一... 阅读全文
posted @ 2009-06-18 14:56 辛勤耕耘 阅读(1067) 评论(0) 推荐(0)
摘要:一、什么是条件变量 与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。 条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。条件的检测是在互斥锁的保护下进行的。如果一个... 阅读全文
posted @ 2009-06-18 14:51 辛勤耕耘 阅读(561) 评论(0) 推荐(0)
摘要:一、什么是互斥锁 另一种在多线程程序中同步访问手段是使用互斥量。程序员给某个对象加上一把“锁”,每次只允许一个线程去访问它。如果想对代码关键部分的访问进行控制,你必须在进入这段代码之前锁定一把互斥量,在完成操作之后再打开它。 互斥量函数有 pthread_mutex_init 初始化一个互斥量 pthread_mutex_lock 给一个互斥量加锁 pthread_mute... 阅读全文
posted @ 2009-06-18 14:48 辛勤耕耘 阅读(644) 评论(0) 推荐(0)
摘要:一,信号灯Posix有名信号灯 函数sem_open创建一个新的有名信号灯或打开一个已存在的有名信号灯。有名信号灯总是既可用于线程间的同步,又可以用于进程间的同步。1.posix有名信号灯函数1.名称::sem_open功能:创建并初始化有名信号灯头文件:#include <semaphore.h>函数原形:sem_t *sem_open(const char *name,int of... 阅读全文
posted @ 2009-06-18 14:46 辛勤耕耘 阅读(640) 评论(0) 推荐(0)