嵌入式linux
文章平均质量分 74
zyboy2000
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
linux top VIRT RES SHR SWAP DATA内存参数详解
Linux top VIRT RES SHR SWAP DATA内存参数详解 其实很早之前就想开博客,写一写码农几年自己积攒下来的知识与见解。看过很多文章有过很多感触,有些收获很值得梳理一下认真思考反思的。今天就先从基本的top开始吧,在网上看了很多关于top讲解内存参数的文章,千篇一律,大部分都是不经深思的转载,自我验证的却只有少数,也许大家忙于工作,急于找到问题并快速解决,而忽略了事后思考总结给自己带来成长的乐趣了吧。不能否认生活节奏的加快让我们失去了很多自我反省与总结的时间与机会。好了,闲话到此转载 2021-06-09 08:55:50 · 1477 阅读 · 0 评论 -
Linux内核在s3c2410平台的移植
一.内核结构 /arch 所有硬件结构特定的kernel代码。多平台设计所用,如i386,alpha,arm(与体系结构相关的代码都存放在arch//和include/asm-/目录下。如arm体系则是arch/arm和include/asm-arm.);/drivers 内核中所有的设备驱动程序,如usb和sound;/fs 所有的文件系统的代码,如ntfs,ext3,jf转载 2009-05-10 11:42:00 · 834 阅读 · 0 评论 -
configure.in的Config语言
Config语言不是bash. Config语言是一种Linux内核配置语言. config.in and Config.in都是使用本语言编制而成. 尽管它看起来,通常工作时,很象一个SH语言的子集,CONFIG语言有更加严格的语法和不同的语义.CONFIG语言编程的基本指南:仅使用在CONFIG.IN文件中出现的编程语句.2. 说明有四各配置程序可以解释和识别Config语言转载 2009-05-10 11:44:00 · 853 阅读 · 0 评论 -
Linux常用命令
cp -d 拷贝软链接文件cd - 回到上次目录命令后+两次tab键 自动联想locate xxxxfind ./ -name xxx解压 tar zxvf software.tar.gz压缩 tar zcvf software.tar.gz /usr/local/softwarevi快捷键1.向下翻页快捷键(下一页):Ctrl + f2.向上翻页快捷键...原创 2009-05-10 21:14:00 · 928 阅读 · 0 评论 -
GCC命令详解
常见用法:GCC 选项 GCC 有超过100个的编译选项可用. 这些选项中的许多你可能永远都不会用到, 但一些主要的选项将会频繁用到. 很多的 GCC 选项包括一个以上的字符. 因此你必须为每个选项指定各自的连字符, 并且就象大多数 Linux 命令一样你不能在一个单独的连字符后跟一组选项. 例如, 下面的两个命令是不同的: gcc -p -g test.c gcc -pg test.c转载 2009-05-09 23:24:00 · 1431 阅读 · 1 评论 -
深入嵌入式系统的 BootLoader
一、简介 本文将从 BootLoader 的概念、BootLoader 的主要任务、BootLoader 的框架结构以及 BootLoader 的安装等四个方面来讨论嵌入式系统的 BootLoader。 引导加载程序 。包括固化在固件 (firmware) 中的 boot 代码 ( 可选 ) ,和 Boot Loader 两大部分。 Linux 内核 。特定于嵌入式板子的定制内核以转载 2009-05-10 11:39:00 · 980 阅读 · 0 评论 -
建立arm-linux-gcc交叉编译环境
一、交叉编译环境 arm-linux-gcc-2.95.3 的建立1.下载cross-2.95.3.tar.bz22.建目录,复制,解压# cd /usr/local# mkdir arm# cd arm复制cross-2.95.3.tar.bz2 到当前目录# tar jxvf cross-2.95.3.tar.bz23.导出/usr/local/arm/2.95.3/bin 到环境变量在转载 2009-05-10 11:41:00 · 866 阅读 · 0 评论 -
Linux内核同步机制——原子操作
原子操作定义: 原子操作为不可分割的,在执行完毕不会被任何其它任务或事件中断的操作 头文件位置: /usr/src/kernels/2.6.9-55.EL-hugemem-i686/include/asm-i386/atomic.h 原子变量原型定义: typedef struct { volatile int counter转载 2009-05-12 21:24:00 · 972 阅读 · 0 评论 -
Linux内核同步机制——自旋锁
之前已经给出了原子操作部分内容,现将自旋锁部分内容整理如下,其中代码引用自os网站上源码阅读连接中的2.6.22.6版本,体系结构选用了i386。 信号量部分将在后续给出。 有疑义,欢迎共同探讨!2.自旋锁自旋锁是Linux内核常用的锁机制,它只能被一个执行进程持有。当一个进程去获取已被其他进程占有的自旋锁时,该进程会一直等待,直到锁可用为止。由于自旋锁的这种忙等机制,使得自旋锁不适合长期加锁转载 2009-05-12 21:42:00 · 3212 阅读 · 0 评论 -
读写锁和顺序锁
读写锁,是自旋锁的一种衍生锁,为什么要衍生锁了,是因为自旋锁在多个执行单元在同时读写临界资源时都会被锁住,这样最多只能有一个执行单元拥有锁进而对资源进行操作,然而事实并非如此,在很多时候,同时读取临界资源是没有问题的,所以引入读写锁,他解决了读执行单元同时操作临界资源的问题,即允许读并发,但在写单元执行时最多允许一个进程访问临界资源。 定义和初始化: rwlock_t my_rw转载 2009-05-12 21:47:00 · 3953 阅读 · 0 评论 -
信号量
信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。当公共资源增加时,调用函数sem_post()增加信号量。只有当信号量值大于0时,才能使用公共资源,使用后,函数sem_wait()减少信号量。函数sem_trywait()和函数pthread_ mutex_trylock()起同样的作用,它是函数sem_wait()的非阻塞版本。下面我们逐个介绍和信号量有关的一些函数,它转载 2009-05-12 22:00:00 · 736 阅读 · 0 评论 -
自旋锁与信号量比较
自旋锁和信号量是内核的同步方法中用的比较频繁的,下面给出大致描述,并对这两种机制的使用进行相关比较1.自旋锁自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,不需要自旋锁)。自旋锁最多只能被一个内核任务持有,如果一个内核任务试图请求一个已被争用(已经被持有)的自旋锁,那么这个任务就会一转载 2009-05-12 22:02:00 · 1341 阅读 · 0 评论 -
同步和异步的区别(转)
答案一:1.异步传输 通常,异步传输是以字符为传输单位,每个字符都要附加 1 位起始位和 1 位停止位,以标记一个字符的开始和结束,并以此实现数据传输同步。所谓异步传输是指字符与字符(一个字符结束到下一个字符开始)之间的时间间隔是可变的,并不需要严格地限制它们的时间关系。起始位对应于二进制值 0,以低电平表示,占用 1 位宽度。停止位对应于二进制值 1,以高电平表示,占用 1~2 位宽度。一个字符转载 2009-05-12 22:09:00 · 1349 阅读 · 0 评论 -
进程和线程的区别
进程与线程的区别 什么是进程(Process):普通的解释就是,进程是程序的一次执行,而什么是线程(Thread),线程可以理解为进程中的执行的一段程序片段。在一个多任务环境中下面的概念可以帮助我们理解两者间的差别: 进程间是独立的,这表现在内存空间,上下文环境;线程运行在进程空间内。 一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间;而线程转载 2009-05-16 14:16:00 · 697 阅读 · 0 评论 -
原子操作
在多进程(线程)访问资源时,能够确保所有其他的进程(线程)都不在同一时间内访问相同的资源。 原子操作:UP和SMP的异同 ----------------------------------------------------------- 原子操作是不可分割的,在执行完毕不会被任何其它任务或事件中断。在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可转载 2009-05-15 07:14:00 · 962 阅读 · 0 评论 -
s3c2410 MMU(存储器管理单元)讲解
MMU,全称Memory Manage Unit, 中文名——存储器管理单元。 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至转载 2009-06-02 13:46:00 · 998 阅读 · 0 评论 -
S3C2410 MMU 代码
1.MMU的工作原理我这里就不阐述了。网上有篇关于S3C2410 MMU的讲解,很详细。我就看了韦东山大哥的书的实验代码就写一些体会,并把源代码发出来。具体的代码如下:////////////////////////////////////head.S//////////////////////////////////////////////////////////////////////@***转载 2009-06-02 15:11:00 · 1727 阅读 · 0 评论 -
Linux字符设备驱动程序的编写框架
一、Linux device driver 的概念 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能: 1、对设备初始化和释放; 2、把数据从内核传送到硬件和从硬件转载 2009-06-10 11:12:00 · 720 阅读 · 0 评论 -
嵌入式系统Boot Loader技术内幕[转]
本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念、软件设计的主要任务以及结构框架等内容。1. 引言在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader转载 2009-06-10 11:55:00 · 969 阅读 · 0 评论 -
open与fopen的区别
1.open函数原型:int open(const char *path, int access,int mode)path 要打开的文件路径和名称 access 访问模式 宏定义和含义如下: O_RDONLY 1 只读打开转载 2011-07-26 22:38:16 · 6571 阅读 · 0 评论 -
select详解及代码释义
关于select函数:其函数原型为:int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);此函数的功能是由内核检测在timeout时间内,是否有readfds,writefds,exceptfds三个句柄集(file descriptors)里的某转载 2009-05-14 23:30:00 · 2893 阅读 · 0 评论 -
回车,换行,tab,空格
关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 于是,研制人员想了个办法解决这个问题,就是原创 2011-05-27 09:51:00 · 5410 阅读 · 0 评论 -
linux中修改环境变量
在Linux系统中有两种设置环境变量 PATH 的方法。第一种适用于为单一用户设置 PATH,第二种是为全局设置 PATH。第一种方法:在用户主目录下有一个 .bashrc 文件,可以在此文件中加入 PATH 的设置如下:export PATH=”$PATH:/your path1/:/your path2/…..”注意:每一个 path 之间要用 “:“ 分隔。注销重启 X 就可以了。第二转载 2009-05-10 11:45:00 · 791 阅读 · 0 评论 -
Linux进程通信--信号
信号本质信号是在软件层次上对中断机制的一种模拟,软中断 信号来源信号事件的发生有两个来源:硬件来源:(比如我们按下了键盘或者其它硬件故障);软件来源:最常用发送信号的系统函数是kill, raise, alarm和setitimer以及sigqueue函数,软件来源还包括一些非法运算等操作。 int kill(pid_t pid,int signo) 参数:p原创 2009-05-17 17:38:00 · 1109 阅读 · 0 评论 -
Linux下进程信息的深入分析
这里我们主要介绍进程的状态,进程的状态可以通过/proc/PID/status来查看,也可以通过/proc/PID/stat来查看.如果说到工具大家用的最多的ps也可以看到进程的信息.这里我们通过/proc/PID/status来分析进程的信息.在2.6.18之后的内核,多了capibilty/cpusets等信息.查看进程状态信息如下:more sta转载 2015-12-29 12:23:29 · 8805 阅读 · 0 评论 -
Linux进程状态(ps stat)之R、S、D、T、Z、X
一、进程的状态表述:#define TASK_RUNNING 0#define TASK_INTERRUPTIBLE 1#define TASK_UNINTERRUPTIBLE 2#define TASK_STOPPED 4#define TASK_TRACED 8/* in tsk->exit_state */#define EXIT_ZOMBIE 16#d转载 2009-05-13 22:24:00 · 8185 阅读 · 1 评论 -
GNU C 与 ANSI C的区别
1.零长度数组GNU C允许使用零长度数组,定义变长度对象时比较方便struct var_data { int len; char data[0];};var_data的大小仅为一个int型,data是常量地址,data[index]是访问其后的内存空间。struct var_data *s = malloc(sizeof(var转载 2009-07-17 15:29:00 · 1473 阅读 · 0 评论 -
linux线程浅析
在许多经典的操作系统教科书中, 总是把进程定义为程序的执行实例, 它并不执行什么, 只是维护应用程序所需的各种资源. 而线程则是真正的执行实体. 为了让进程完成一定的工作, 进程必须至少包含一个线程.进程所维护的是程序所包含的资源(静态资源), 如: 地址空间, 打开的文件句柄集, 文件系统状态, 信号处理handler, 等;线程所维护的运行相关的资源(动态资源), 如: 运行栈, 调度转载 2009-07-14 16:55:00 · 1733 阅读 · 0 评论 -
C语言通用数据类型链表的实现
可接受任意类型的数据的C语言链表的实现(说白了其实就是链表结构体中有一个void * 类型指针即可) 今天在宣讲会上讲了一下我所写的那个可以接收任意类型的参数类型的链表,感觉还是没有讲清楚,再次整理一下 ,同样的道理我们可以构造出其它的可以接受任意数据类型的结构,如:可接收任意数据类型的栈,可接收任意数据类型的队列,可接收任意数据类型的树················转载 2009-09-24 09:22:00 · 2639 阅读 · 0 评论 -
Linux 的进程组、会话、守护进程
一、进程组ID每个进程都属于一个进程组。每个进程组有一个领头进程。进程组是一个或多个进程的集合,通常它们与一组作业相关联,可以接受来自同一终端的各种信号。每个进程组都有唯一的进程组ID(整数,也可以存放在pid_t类型中)。进程组由进程组ID来唯一标识。除了进程号外(PID)之外,进程组ID也是一个进程的必备属性之一。getpgrp: 获得进程组 id, 即领头进程的 pid#转载 2009-06-11 14:47:00 · 791 阅读 · 0 评论 -
Linux内核线程、用户进程,用户线程
这个概念是很多人都混淆的了,我也是,刚开始无法理解OS时,把Linux内核也当做一个进程。其实内核本身不是以进程形式存在的,最多在初始化的过程中表现得就像一个进程,但是内核绝对没有进程的数据结构task_struct,可以严格跟进程区分开 。自从创建init 进程之后,内核就不再主动占有cpu了。只有当进程主动要求和中断到来时,内核才动一动,很快又把cpu还给合适的进程,不是想象中的,以后台服转载 2009-06-10 20:52:00 · 1080 阅读 · 0 评论 -
dup/dup2 标准输入输出重定向
最近一段时间在用c写cgi程序,接触了这两个系统调用dup/dup2,碰到了一些问题, 也解决了一些问题, 写出来与大家分享,也方便以后参考:)1. 文件描述符在内核中数据结构 在具体说dup/dup2之前, 我认为有必要先了解一下文件描述符在内核中的形态。一个进程在此存在期间,会有一些文件被打开,从而会返回一些文件描述符,从shell中运行一转载 2009-06-11 13:41:00 · 1949 阅读 · 0 评论 -
/proc/pid/stat字段说明
可以通过查看/usr/src/linux/Documentation/filesystems/proc.txt文件来获得更多的信息[root@localhost ~]# cat /proc/6873/stat6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 0 5882654转载 2016-01-04 16:25:43 · 20517 阅读 · 0 评论 -
Device Tree常用方法解析
Device Tree常用方法解析Device Tree在Linux内核驱动中的使用源于2011年3月17日Linus Torvalds在ARM Linux邮件列表中的一封邮件,他宣称“this whole ARM thing is a f*cking pain in the ass”,并提倡学习PowerPC等其他架构已经成熟使用的Device Tree技术。自此,Device Tree转载 2016-03-04 08:34:21 · 1037 阅读 · 0 评论 -
Linux内核驱动自动创建设备节点文件
Linux下生成驱动设备节点文件的方法有3个:1、手动mknod;2、利用devfs;3、利用udev在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点。在2.6.17以前,在/dev目录下生成设备文件很容易,转载 2016-03-06 08:28:51 · 5878 阅读 · 0 评论 -
Linux下/dev/mem和/dev/kmem及操作gpio实例
目前我所知道的在linux下操作GPIO有两种方法: 1. 编写驱动,这当然要熟悉linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据ioctl命令进行GPIO寄存器的读写,并把结果回送到应用层。这里提供一点程序片断供大家参考:[cpp] view plain copy转载 2016-03-04 08:36:27 · 2053 阅读 · 0 评论 -
Linux设备驱动之mmap设备操作
1.mmap系统调用void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);功能:负责把文件内容映射到进程的虚拟地址空间,通过对这段内存的读取和修改来实现对文件的读取和修改,而不需要再调用read和write;参数:addr:映射的起始地址,设为NULL由系统指定;len转载 2016-03-09 09:21:39 · 1089 阅读 · 0 评论 -
/dev/mtd和/dev/mtdblock的区别
这里对于mtd和mtdblock设备的使用场景进行简单总结:mtd-utils工具只能应用与/dev/mtdN的MTD字符设备mount、umount命令只对/dev/mtdblockN的MTD块设备有效/dev/mtdN和/dev/mtdblockN是同一个MTD设备的同一个分区(N一样)一个MTD原始设备可以通过mtd_part分割成数个MTD原始设备注册进 mtd_t转载 2016-03-11 12:52:43 · 4061 阅读 · 0 评论 -
Linux设备驱动之Ioctl控制
大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能力。 一、在用户空间,使用ioctl系统调用来控制设备,原型如下:int ioctl(int fd,unsigned long cmd,...);/*fd:文件描述符cmd:控制命令...:可选参数:插入*argp,具体内容依赖于cmd*/ 用户程序所作的只是通过命令码告诉驱动程序它想做什么,转载 2016-03-23 21:55:18 · 1193 阅读 · 0 评论 -
S3C2440开发板LED驱动——ioremap 映射
刚开始学字符设备驱动,感觉最难的是驱动和底层硬件的连接。linux上的驱动程序,是基于操作系统之上的,他并不直接和底层的硬件打交道,但是我们写的驱动必须能使硬件“跑”起来,即与硬件紧密相连。就拿最简单的LED驱动来说,我们的驱动程序是在虚拟的内存上面跑的,但是最终,LED的点亮还是必须靠GPIO管脚的高低电平来控制。那么,我们的虚拟的内存怎么才能和实际的硬件上面的寄存器对应起来呢?转载 2016-03-23 22:00:36 · 1815 阅读 · 0 评论
分享