
嵌入式
文章平均质量分 79
名字很费劲
这个作者很懒,什么都没留下…
展开
-
linux异步通知机制 与 fcntl 函数使用详解
本文介绍了linux异步通知机制的使用,以及fcntl函数的使用详解。在linux字符驱动中;异步通知机制是必须学会的!异步通知的意思就是,一旦设备就绪,则主动通知应用程序,应用程序 根本就不需要查询设备状态,类似于中断的概念,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来 等待信号的到达。下面我们就看一下在linux中机制的实现方式。在linux中,异步通知是使用信号来实现的,而在linux,大概有30种信号,比如大家熟悉的ctrl+c的SIGINT信原创 2015-05-28 19:02:08 · 2628 阅读 · 0 评论 -
linux进程的休眠(等待队列)
当进程以阻塞的方式通信,在得到结果前进程会挂起休眠。为了将进程以一种安全的方式进入休眠,我们需要牢记两条规则:一、永远不要在原子上下文中进入休眠。二、进程休眠后,对环境一无所知。唤醒后,必须再次检查以确保我们等待的条件真正为真简单休眠完成唤醒任务的代码还必须能够找到我们的进程,这样才能唤醒休眠的进程。需要维护一个称为等待队列的数据结构。等待队列就是一个进程链表,其中包含了等待某转载 2015-11-04 16:17:24 · 439 阅读 · 0 评论 -
制作根文件系统的问题
我做的是busybox-1.24.1 arm-linux-gnueabi-gcc 4.7.3 我的linux内核是4.4.3 在编译linux内核时已经选择了支持eabi 但是还是出现了: VFS: Mounted root (jffs2 filesystem) on device 31:3. Freeing unused kernel memory: 208K (c06c2000原创 2016-03-02 21:58:07 · 893 阅读 · 0 评论 -
点阵字库简介及使用方法
如何在嵌入式系统中使用大量的汉字和字符呢? DOS前辈们经过艰辛的努力,将制作好的字模放到了一个个标准的库中以免去后辈的麻烦,这就是点阵字库文件。 一般我们使用16*16的点阵宋体字库,所谓16*16,是每一个汉字在纵、横各16点的区域内显示的。不过后来又有了HZK12、HZK24,HZK32和HZK48字库及黑体、楷体和隶书字库。虽然汉字库种类繁多,但都是按照区原创 2016-03-17 19:46:55 · 4938 阅读 · 0 评论 -
arm linux 交叉编译工具的选择
arm-none-eabi-gcc (ARM architecture,no vendor,not target an operating system,complies with the ARM EABI) 用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),一般适合 ARM7、Cortex-M 和 C转载 2016-02-29 11:28:41 · 1006 阅读 · 0 评论 -
input 子系统
在Linux中,输入子系统是由输入子系统设备驱动层、输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成。其中设备驱动层提供对硬件各寄存器的读写访问和将底层硬件对用户输入访问的响应转换为标准的输入事件,再通过核心层提交给事件处理层;而核心层对下提供了设备驱动层的编程接口,对上又提供了事件处理层的编程接口;而事件处理层就为我们用户空间的应用程序提供了统一访问设备的接口和驱动层提交来的事件处理。所以这使得我们输入设备的驱动部分不在用关心对设备文件的操作,而是要关心对各原创 2015-08-11 16:18:32 · 853 阅读 · 0 评论 -
LINUX 使用tcgetattr函数与tcsetattr函数控制终端
LINUX 使用tcgetattr函数与tcsetattr函数控制终端一为了便于通过程序来获得和修改终端参数,Linux还提供了tcgetattr函数和tcsetattr函数。tcgetattr用于获取终端的相关参数,而tcsetattr函数用于设置终端参数。这两个函数的具体信息如表6.2所示。表6.2 tcgetattr函数和tcsetattr函数转载 2016-04-14 11:23:39 · 364 阅读 · 0 评论 -
ARM linux s3c2440 解决黑屏问题
解决嵌入式系统黑屏问题,嵌入式linux自动关闭屏幕!如果10分钟内不使用键盘、鼠标,你会发现LCD将黑屏。转载 2016-05-27 16:12:35 · 934 阅读 · 0 评论 -
linux中的块缓冲
把块存放在页高速缓存中 一、概述 Linux支持的文件系统大多以块的形式组织文件,为了减少对物理块设备的访问,在文件以块的形式调入内存后,使用块高速缓存(buffer_cache)对它们进行管理。每个缓冲区由两部分组成,第一部分称为缓冲区首部,用数据结构buffer_head表示,第二部分是真正的缓冲区内容(即所存储的数据)。由于缓冲区首部不与数据区域相连,数据区域独立存储。因而在缓冲区首转载 2015-08-20 19:39:02 · 1138 阅读 · 0 评论 -
在伙伴算法之前的内存管理机制
本文的所描述的内核版本是linux-2.4.20 我们知道在linux内核中,获取物理页面是靠着alloc_pages这个函数来实现的,这个函数会尽它的一切努力满足页面的分配需求,如果free页面的队列充足,那么就直接分配一个然后返回了,很简单。但是如果不足,那就要洗洗刷刷把不干净的页面转换成干净的,干净页面多了也可以满足分配的需求了。这个函数从某种意思上说非常以及极其的简单,那是在页面充足的情原创 2015-09-08 22:38:15 · 590 阅读 · 0 评论 -
arm linux 启动代码分析(二)
昨天分析了一下SEP4020 LINUX的zImage的加载引导过程,zImage其实主要就是在重定位代码,然后就是将我们的Image镜像搬运到0x30008000位置,然后向Image传递r0=0,r1=体系架构号,r2=参数列表基址,然后就跳到了Image去执行系统启动了,不过这中间在解压缩内核和搬运过程中是要开MMU和CACHE的,所以其中有相当的篇幅是开这两个玩意的,下面就代码一句一句来介转载 2015-08-01 20:31:19 · 464 阅读 · 0 评论 -
Linux 内核定时器及使用方法
LINUX内核定时器是内核用来控制在未来某个时间点(基于jiffies)调度执行某个函数的一种机制,其实现位于 <linux/timer.h> 和 kernel/timer.c 文件中。每当时钟中断发生时,全局变量jiffies(一个32位的unsigned long 变量,定义在)就加1,因此jiffies记录了字linux系统启动后时钟中断发生的次数.驱动程序常利用jiffies来计算不同事件间的时间间隔.初始化定时器队列结构.timer_list结构在使用前必须初始化,这是要保证结构体中其他的成员能原创 2015-05-29 20:37:18 · 871 阅读 · 0 评论 -
LCD驱动(FrameBuffer)实例开发讲解
一、开发环境主 机:VMWare--Fedora 9开发板:Mini2440--64MB Nand, Kernel:2.6.30.4编译器:arm-linux-gcc-4.3.2二、背景知识1. LCD工作的硬件需求: 要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG转载 2015-06-05 22:09:41 · 783 阅读 · 0 评论 -
linux 内核分析之list_head
一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数转载 2015-06-07 19:25:48 · 409 阅读 · 0 评论 -
windows 下构建 Eclipse gdb 调试平台调试arm程序
安装yargarto 版本eabi编译链 http://www.yagarto.de/安装JAVA虚拟机 JRE 就足够了。下载 eclipse 的 C/C++ 版本下载 zylin 插件,在 eclipse 的 Help --> Install New Software 中添加地址 http://opensource.zylin.com/zylincdt/ 就可以了。原创 2015-07-18 14:39:59 · 4578 阅读 · 0 评论 -
liunx源码 makefile详细分析
1、从总目标uImage说起 2、vmlinux的生成 3、vmlinux-lds、vmlinux-init、vmlinux-main的生成 2 scripts/Makefile.build的第一次调用阶段 1、Makefile.build的包含文件 2、scripts/Makefile.build的总目标 3、drivers/built-转载 2015-07-16 15:55:36 · 659 阅读 · 0 评论 -
arm linux 启动代码分析(一)
这次我写的是Image的启动过程,也即使zImage解压缩结束后的启动代码,这时候的代码开始地址仍然是0x30008000,下面我结合代码来讲吧:Image的启动代码是在/arch/arm/kernel/head.S中的:/* * linux/arch/arm/kernel/head.S * Kernel startup code for all 32-bit CPUs转载 2015-08-01 20:29:13 · 797 阅读 · 0 评论 -
arm linux 启动代码分析(三)
下面是接着第二节往下的:@ 对下面这些地址的理解其实还是很麻烦,但有篇文档写得很清楚《About TEXTADDR, ZTEXTADDR, @ PAGE_OFFSET etc...》。下面程序的意义就是保证解压地址和当前程序的地址不重叠。上面分配了64KB的空间来做解压时的数据缓存。/* 检查是否会覆盖内核映像本身 * r4 = 最后我们的转载 2015-08-01 20:33:31 · 424 阅读 · 0 评论 -
arm linux 启动代码分析uboot
今天晚上总算把自己的arm linux启动部分讲座讲了第一部分和第二部分了,明天还要讲第三部分和第四部分,今天主要讲了下uboot的启动流程和linux的编译链接过程,明天接着讲linux汇编的启动部分,下面我把uboot的部分介绍下一、U-boot的启动流程Uboot的启动流程如下:1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boot第二阶段代码到RAM空转载 2015-08-01 20:42:55 · 649 阅读 · 0 评论 -
万能Makefile
经过几天的实验,终于写出来了,顶层目录的MakefileCROSS_COMPILE ?= arm-linux-CC = $(CROSS_COMPILE)gccLD = $(CROSS_COMPILE)ldTOPDIR = $(shell pwd)CFLAGS := -Wall -O2 -lfreetype -lpngLDFLAGS :=CFLAGS += -I $(TOPD...原创 2018-08-09 17:46:24 · 329 阅读 · 0 评论