嵌入式linux
文章平均质量分 79
zyboy2000
这个作者很懒,什么都没留下…
展开
-
linux top VIRT RES SHR SWAP DATA内存参数详解
Linux top VIRT RES SHR SWAP DATA内存参数详解 其实很早之前就想开博客,写一写码农几年自己积攒下来的知识与见解。看过很多文章有过很多感触,有些收获很值得梳理一下认真思考反思的。今天就先从基本的top开始吧,在网上看了很多关于top讲解内存参数的文章,千篇一律,大部分都是不经深思的转载,自我验证的却只有少数,也许大家忙于工作,急于找到问题并快速解决,而忽略了事后思考总结给自己带来成长的乐趣了吧。不能否认生活节奏的加快让我们失去了很多自我反省与总结的时间与机会。好了,闲话到此转载 2021-06-09 08:55:50 · 1074 阅读 · 0 评论 -
同步和异步的区别(转)
答案一:1.异步传输 通常,异步传输是以字符为传输单位,每个字符都要附加 1 位起始位和 1 位停止位,以标记一个字符的开始和结束,并以此实现数据传输同步。所谓异步传输是指字符与字符(一个字符结束到下一个字符开始)之间的时间间隔是可变的,并不需要严格地限制它们的时间关系。起始位对应于二进制值 0,以低电平表示,占用 1 位宽度。停止位对应于二进制值 1,以高电平表示,占用 1~2 位宽度。一个字符转载 2009-05-12 22:09:00 · 1199 阅读 · 0 评论 -
Linux下的串口编程
在Linux操作系统下有3类主要的设备文件类型:块设备、字符设备和网络设备。这种分类方法可以将控制输入/输出设备的驱动程序与其他操作系统软件分离开来。 字符设备与块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般紧接着发生。块设备则不然,它利用一块系统内存作为缓冲区,若用户进程对设备的请求能满足用户的要求,就返回请求的数据;否则,就调用请求函数来进行实际的I/O操作。块设备转载 2009-06-10 11:11:00 · 1192 阅读 · 0 评论 -
例解GNU C之零长数组与变长数组
前言:计算机语言是编译器和程序员交流的依据和规范,GNU C是GCC特有的功能,在Linux内核中被广泛应用。 帮助文档:http://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/C-Extensions.html#C-Extensions 1、零长数组 GNU C允许声明长度为零的数组,但它只能被用于结构体的最后一个成员。转载 2016-12-20 09:52:28 · 1191 阅读 · 0 评论 -
linux 循环双链表(list.h)
最近看linux 链表,网上很多代码的讲解,总有点知其然不知其所以然的感觉,我看了下有点自己想法,特记录如下:我们之前学习双链表结构体一般如下typedef struct __Node{ int data; 数据 struct __Node *pre; 指向前一个结点指针 struct __Node *next; 指向下一个结点指针原创 2014-07-01 15:47:22 · 1499 阅读 · 0 评论 -
shell 编程中空格的使用方法
空格,一个看不见的字符,很不起眼,也正由于不起眼,很多人经常忽略它,导致代码出错,却还找不着北。这里,我们来聊聊bash中空格的那点事先了解下bash中什么时候该用空格,什么时候不该用。1. 等号赋值两边不能有空格2. 命令与选项之间需要空格3. 管道两边空格可有可无我们来看看常见的问题1. 赋值时等号两边或者只有左边多了空格?转载 2016-12-30 10:32:06 · 2223 阅读 · 2 评论 -
双网卡在同一网段的解决办法
1.动态路由/静态路由动态路由路由选择器自动共享路由信息自动构造路由表,需要一个路由协议,如RIP或OSPF静态路由路由选择器不共享路由信息(单方向路由)手工构造路由表2.直连路由/网关路由(间接路由)其区别在于,发往直连路由的设备中不但具有指明目的端的I P地址,还具有其mac地址。当报文被发往一个间接路由时,I P地址指明转载 2016-01-19 15:21:09 · 29437 阅读 · 3 评论 -
linux bus driver device 三者关系
总线 设备 驱动1.设备添加 和 驱动注册 相互独立,谁先添加或注册没有关系2.设备添加 和 驱动注册,需指定对应的总线3.总线有match函数,指明设备和驱动匹配的条件。4.设备添加后,会遍历对应总线上的驱动,根据该总线match函数来找到匹配的驱动,找到后执行驱动的probe函数5.驱动添加后,会遍历对应总线上的设备,根据该总线match函数来找到匹配的设备,找到后执行驱动转载 2016-07-20 19:50:41 · 1226 阅读 · 0 评论 -
linux pci/pcie驱动
Linux下的PCI总线驱动http://blog.csdn.net/weiqing1981127/article/details/8031541Linux PCI网卡驱动的详细分析http://soft.chinabyte.com/os/13/12304513.shtmlLinux kernel中网络设备的管理http://www.linuxi转载 2016-07-20 19:59:49 · 28042 阅读 · 1 评论 -
SO_REUSEADDR和SO_REUSEPORT异同
文章内容来源于stackoverflow上的回答,写的很详细http://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t 虽然不同的系统上socket的实现方式有一些差异,但都来源于对BSD socke转载 2017-11-13 17:36:18 · 1339 阅读 · 1 评论 -
linux小知识
1.linux 包含 # include ------ vxworks #include 2.linux 保护 include ------vxworks没有 struct timeval{time_t tv_sec; /* Seconds. */time_t tv_usec; /* Microseconds. */};gettimeofday原创 2015-12-01 20:07:33 · 901 阅读 · 0 评论 -
linux学习3,init程序
上一节介绍了如何编译出指定平台的 linux 内核,也介绍了如何安装和利用 qemu 模拟器运行编译出来的 linux 内核。在此基础上,我们尝试修改了 linux 内核源码,成功的让 linux 内核在启动时,打印出了我们的名字。我不明白,上一篇是一个一个字手打出来的原创文章,为何头条给了 0 推荐。感兴趣的朋友手动点我过去看看吧。还记得上一节遗留的问题吗?虽然 qemu 模拟...转载 2019-06-21 12:28:37 · 871 阅读 · 0 评论 -
pthread_create传递线程参数需要注意的问题
创建线程需要时间,这个线程还未创建完成时,如果参数指针的内存被释放了就会出问题,创建了线程后,加少量延时,或者传递申请malloc空间指针,在线程中释放。程序如下void* thread_rountine(void *arg){ int *cnt = (int*)arg; for (int i=0; i<5; ++i) printf("%d-hell...转载 2019-05-19 08:49:05 · 3600 阅读 · 0 评论 -
内核空间与用户空间的通信方式
下面总结了7种方式,主要对以前不是很熟悉的方式做了编程实现,以便加深印象。1.使用API:这是最常使用的一种方式了A.get_user(x,ptr):在内核中被调用,获取用户空间指定地址的数值并保存到内核变量x中。B.put_user(x,ptr):在内核中被调用,将内核空间的变量x的数值保存到到用户空间指定地址处。C.Copy_from_user()/copy_to_use...转载 2019-05-05 18:19:44 · 4542 阅读 · 1 评论 -
Llinux进程间通信-AF_UNIX 套接字编程
不需要IP和Port, 而是通过一个文件名来表示 domain 为 AF_UNIXAF_UNIX 地址系列(使用 AF_UNIX 或 AF_UNIX_CCSID 地址系列的套接字)可以是面向连接的(类型 SOCK_STREAM),也可以是无连接的(类型 SOCK_DGRAM)。两种类型都很可靠,原因是没有连接两个进程的外部通信函数。UNIX 域数据报套接字的运行方式与 UDP 数据报套接字...转载 2019-05-03 09:21:21 · 1876 阅读 · 0 评论 -
linux虚拟终端
1)tty命令 查看当前进程使用哪个终端2)/dev/console是系统控制终端,console指向激活的那个tty,一般情况下/dev/console是指向/dev/tty0,在嵌入式机上console=ttyS0=串口3)/dev/tty0是对应当前的虚拟控制台(终端)4)当你运行一个程序的时候,此进程一定会对应一个终端(当前的虚拟机控制台),printf打印信息会在终端出现,而当程序...转载 2019-03-04 09:47:32 · 5249 阅读 · 0 评论 -
Linux下错误的捕获:全局变量errno和strerror()
驱动open()函数 返回0值,表示成功,只要有一个权限被禁止则返回-1。得到-1值时参考errno可以确定实际设备驱动程序中返回的值。经常在调用linux 系统api 的时候会出现一些错误,比方说使用open() write() creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因。这个时候使用errno这个全局变量就相当有用了。 在程...转载 2018-05-05 16:03:30 · 1147 阅读 · 0 评论 -
信号处理函数陷阱:调用malloc导致死锁
关于信号处理signal()、sigaction()等的使用,相信很多人都已熟悉。 这里主要想讲一下信号处理函数使用上的一个常见陷阱:信号处理函数必须是可重入函数。如果信号处理函数不可重入,那么可能导致很多诡异问题。 《UNIX环境高级编程》“可重入函数”章节中这样写道: “但在信号处理程序中,不能判断捕捉到信号时进程在何处执行。如果进程正在执行mal转载 2018-01-03 18:46:56 · 9445 阅读 · 0 评论 -
e500核 上电启动及uboot流程
系统上电到执行第一条指令前,需要经过配置PLL、Local Bus控制器、LAW、MMU等操作,这些配置完全是由Cpu根据芯片的默认值和芯片外部配置引脚的输入状态自动完成的。如:1) Cpu根据cfg_sys_pll[0:2]的输入状态决定当前CPU的BBC对SYS_CLK的倍频参数;2) Cpu根据cfg_ddr_pll[0:2] 的输入状态决定DDR的时钟频率(DD转载 2018-01-02 20:51:14 · 861 阅读 · 0 评论 -
linux NANDFLASH坏区管理
spare area,也叫oob(out of band):存有坏块标识+ECC 对2kbyte的flash来说,厂家说是前两个即第0、1个字节是坏块标志。ECC:目前有1位、4位和8位,也就是说在512字节中如果是4位的ecc那就可以纠正最多4个bit的错误 1位/256字节 (汉明码)--- 需3字节ECC。对256字节的数据共生成了6个Bit的列校验结果,16个Bit原创 2016-07-27 10:44:29 · 4279 阅读 · 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 · 756 阅读 · 0 评论 -
原子操作
在多进程(线程)访问资源时,能够确保所有其他的进程(线程)都不在同一时间内访问相同的资源。 原子操作:UP和SMP的异同 ----------------------------------------------------------- 原子操作是不可分割的,在执行完毕不会被任何其它任务或事件中断。在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可转载 2009-05-15 07:14:00 · 861 阅读 · 0 评论 -
s3c2410 MMU(存储器管理单元)讲解
MMU,全称Memory Manage Unit, 中文名——存储器管理单元。 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至转载 2009-06-02 13:46:00 · 925 阅读 · 0 评论 -
S3C2410 MMU 代码
1.MMU的工作原理我这里就不阐述了。网上有篇关于S3C2410 MMU的讲解,很详细。我就看了韦东山大哥的书的实验代码就写一些体会,并把源代码发出来。具体的代码如下:////////////////////////////////////head.S//////////////////////////////////////////////////////////////////////@***转载 2009-06-02 15:11:00 · 1603 阅读 · 0 评论 -
Linux字符设备驱动程序的编写框架
一、Linux device driver 的概念 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能: 1、对设备初始化和释放; 2、把数据从内核传送到硬件和从硬件转载 2009-06-10 11:12:00 · 638 阅读 · 0 评论 -
嵌入式系统Boot Loader技术内幕[转]
本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念、软件设计的主要任务以及结构框架等内容。1. 引言在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader转载 2009-06-10 11:55:00 · 906 阅读 · 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 · 6313 阅读 · 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 · 2671 阅读 · 0 评论 -
回车,换行,tab,空格
关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 于是,研制人员想了个办法解决这个问题,就是原创 2011-05-27 09:51:00 · 5145 阅读 · 0 评论 -
linux中修改环境变量
在Linux系统中有两种设置环境变量 PATH 的方法。第一种适用于为单一用户设置 PATH,第二种是为全局设置 PATH。第一种方法:在用户主目录下有一个 .bashrc 文件,可以在此文件中加入 PATH 的设置如下:export PATH=”$PATH:/your path1/:/your path2/…..”注意:每一个 path 之间要用 “:“ 分隔。注销重启 X 就可以了。第二转载 2009-05-10 11:45:00 · 703 阅读 · 0 评论 -
进程和线程的区别
进程与线程的区别 什么是进程(Process):普通的解释就是,进程是程序的一次执行,而什么是线程(Thread),线程可以理解为进程中的执行的一段程序片段。在一个多任务环境中下面的概念可以帮助我们理解两者间的差别: 进程间是独立的,这表现在内存空间,上下文环境;线程运行在进程空间内。 一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间;而线程转载 2009-05-16 14:16:00 · 630 阅读 · 0 评论 -
自旋锁与信号量比较
自旋锁和信号量是内核的同步方法中用的比较频繁的,下面给出大致描述,并对这两种机制的使用进行相关比较1.自旋锁自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,不需要自旋锁)。自旋锁最多只能被一个内核任务持有,如果一个内核任务试图请求一个已被争用(已经被持有)的自旋锁,那么这个任务就会一转载 2009-05-12 22:02:00 · 1194 阅读 · 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 · 750 阅读 · 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 · 803 阅读 · 0 评论 -
GCC命令详解
常见用法:GCC 选项 GCC 有超过100个的编译选项可用. 这些选项中的许多你可能永远都不会用到, 但一些主要的选项将会频繁用到. 很多的 GCC 选项包括一个以上的字符. 因此你必须为每个选项指定各自的连字符, 并且就象大多数 Linux 命令一样你不能在一个单独的连字符后跟一组选项. 例如, 下面的两个命令是不同的: gcc -p -g test.c gcc -pg test.c转载 2009-05-09 23:24:00 · 1356 阅读 · 1 评论 -
深入嵌入式系统的 BootLoader
一、简介 本文将从 BootLoader 的概念、BootLoader 的主要任务、BootLoader 的框架结构以及 BootLoader 的安装等四个方面来讨论嵌入式系统的 BootLoader。 引导加载程序 。包括固化在固件 (firmware) 中的 boot 代码 ( 可选 ) ,和 Boot Loader 两大部分。 Linux 内核 。特定于嵌入式板子的定制内核以转载 2009-05-10 11:39:00 · 815 阅读 · 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 · 797 阅读 · 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 · 890 阅读 · 0 评论 -
Linux内核同步机制——自旋锁
之前已经给出了原子操作部分内容,现将自旋锁部分内容整理如下,其中代码引用自os网站上源码阅读连接中的2.6.22.6版本,体系结构选用了i386。 信号量部分将在后续给出。 有疑义,欢迎共同探讨!2.自旋锁自旋锁是Linux内核常用的锁机制,它只能被一个执行进程持有。当一个进程去获取已被其他进程占有的自旋锁时,该进程会一直等待,直到锁可用为止。由于自旋锁的这种忙等机制,使得自旋锁不适合长期加锁转载 2009-05-12 21:42:00 · 3118 阅读 · 0 评论 -
读写锁和顺序锁
读写锁,是自旋锁的一种衍生锁,为什么要衍生锁了,是因为自旋锁在多个执行单元在同时读写临界资源时都会被锁住,这样最多只能有一个执行单元拥有锁进而对资源进行操作,然而事实并非如此,在很多时候,同时读取临界资源是没有问题的,所以引入读写锁,他解决了读执行单元同时操作临界资源的问题,即允许读并发,但在写单元执行时最多允许一个进程访问临界资源。 定义和初始化: rwlock_t my_rw转载 2009-05-12 21:47:00 · 3816 阅读 · 0 评论