深海的小鱼儿

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

随笔分类 -  Linux Driver for Embedded

1 2 下一页

摘要:编译内核出现以下错误: [root@localhost linux-2.6.32.2]# make zImage CHK include/linux/version.hmake[1]: `include/asm-arm/mach-types.h' is up to date. CHK include/linux/utsrelease.h SYMLINK include/asm -> includ... 阅读全文
posted @ 2012-07-09 10:43 深海的小鱼儿 阅读(2752) 评论(0) 推荐(0) 编辑

摘要:一.栈的整体作用 (1)保存现场/上下文 (2)传递参数:汇编代码调用c函数时,需传递参数 (3)保存临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。 二.为什么汇编代码调用c函数需要设置栈 之前看了很多关于uboot的分析,其中就有说要为C语言的运行,准备好栈。而自己在Uboot的start.S汇编代码中,关于系统初始化,也看到有栈指针初始化这个动作。但是,从来只是看到有人说... 阅读全文
posted @ 2012-04-28 16:45 深海的小鱼儿 阅读(3612) 评论(0) 推荐(1) 编辑

摘要:VERSION = 2010 PATCHLEVEL = 03 SUBLEVEL = EXTRAVERSION = ifneq "$(SUBLEVEL)" "" U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) else U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL)... 阅读全文
posted @ 2012-04-02 13:40 深海的小鱼儿 阅读(1742) 评论(0) 推荐(0) 编辑

摘要:解压u-boot压缩文件即可得到u-boot源代码。这些源代码可以分为3类: 第1类目录与处理器体系结构或者开发板硬件直接相关; 第2类目录是一些通用的函数或者驱动程序; 第3类目录是u-boot的应用程序、工具或者文档。 u-boot的源码顶层目录说明 目 录 特 性 解 释 说 明 board 平台依赖 存放电路板相关的目录文件, 例如:RPXlite(mpc8xx)、 smdk2410(ar... 阅读全文
posted @ 2012-04-02 13:36 深海的小鱼儿 阅读(812) 评论(0) 推荐(0) 编辑

摘要:当我们编译U-BOOT的时候,大家键入make smdk2410_config,make 的时候都作了那些动作呢,这里我先大概介绍一下Makefile的内容,然后在大概理解一下命令执行的流程。如果有错的地方,希望大家指正,谢谢。 1.u-boot顶层目录的Makefile分析: HOSTARCH := $(shell uname -m | \ sed -e s/i.86/i386/ \ -e s/... 阅读全文
posted @ 2012-04-02 13:34 深海的小鱼儿 阅读(3521) 评论(0) 推荐(0) 编辑

摘要:1.1 U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boot第二阶段代码到RAM空间 Ø 设置好栈 Ø 跳转到第二阶段代码入口 (2)第二阶段的功能 Ø 初始化本阶段使用的硬件设备 Ø 检测系统内存映射 Ø 将内核从Flash读取到RAM中 Ø 为内核设置启动参数 Ø 调用内核 1.1.1 U-Boo... 阅读全文
posted @ 2012-04-02 12:59 深海的小鱼儿 阅读(448) 评论(0) 推荐(0) 编辑

摘要:2.1 U-Boot Makefile分析 2.1.1 U-Boot编译命令 对于mini2440开发板,编译U-Boot需要执行如下的命令: $ make mini2440_config $ make all 使用上面的命令编译U-Boot,编译生成的所有文件都保存在源代码目录中。为了保持源代码目录的干净,可以使用如下命令将编译生成的文件输出到一个外部目录,而不是在源代码目录中,下面的2种方法都... 阅读全文
posted @ 2012-04-02 12:57 深海的小鱼儿 阅读(1611) 评论(0) 推荐(0) 编辑

摘要:http://blog.chinaunix.net/space.php?uid=22337711&do=blog&id=1774864 http://blog.chinaunix.net/space.php?uid=20543672&do=blog&id=94369 花了几天时间才把基于crosstool-ng的arm-linux交叉编译环境建立好,其间过程中一路磕磕碰碰,较为辛苦,最终成功完成,... 阅读全文
posted @ 2012-04-01 14:05 深海的小鱼儿 阅读(2747) 评论(0) 推荐(0) 编辑

摘要:Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书为《linux_device_driver 3rd Edition》,这是一本很经典的书,无奈Linux的东东还是过于庞大,这本侧重于实战的书籍也只能停留在基本的接口介绍上,更深入的东东只能靠我们自己摸索了。但万事总有一个开头,没有对Linux驱动整体框架的把握是很难做一个优秀的驱动开发者的。除了这本Jonathan Corbet, Gr... 阅读全文
posted @ 2012-03-27 19:21 深海的小鱼儿 阅读(19394) 评论(3) 推荐(4) 编辑

摘要:在我们的驱动开发中经常用到结构体,下面将结构体的基本用法总结如下: #include<stdio.h>#include<stdlib.h> #define Debug struct student{ int old; int score;}; typedef struct master{ int old; int score;}ma; typedef struct doctor{ int... 阅读全文
posted @ 2012-03-19 10:22 深海的小鱼儿 阅读(404) 评论(0) 推荐(0) 编辑

摘要:Linux内核的同步机制:等待队列 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在Linux2.4.21中,等待队列在源代码树include/linux/wait.h中,这是一个通过list_head连接的典型双循环链表,如下图所示。 在这个链表中,有两种数据结构:等待队列头(wait_queue_head_t)和等待... 阅读全文
posted @ 2011-11-20 20:36 深海的小鱼儿 阅读(1143) 评论(0) 推荐(0) 编辑

摘要:前几天在看驱动的时候碰到了等待队列,上网去搜了一下,再结合代码看了一下,深有体会.在 kernel 里,wait_queue 的应用很广,举凡 device driver,semaphore 等方面都会使用到 wait_queue 来 implement。所以,它算是 kernel 里蛮 基本的一个数据结构。 首先,我们得明白,linux中的所有的进程都由task_struct这个结构管理。在生... 阅读全文
posted @ 2011-11-20 20:34 深海的小鱼儿 阅读(9620) 评论(0) 推荐(3) 编辑

摘要:相信很多写程序的人都写过 socket 的程序。当我们 open 一个 socket 之后,接着去读取这个 socket,如果此时没有任何资料可供读取,那 read 就会 block 住。(这是没有加上 O_NONBLOCK 的情形),直到有资料可读取才会传回来。在 Linux kernel 里有一个数据结构可以帮助我们做到这样的功能。这个数据结构就是这里要跟各位介绍的 wait queue。在 ... 阅读全文
posted @ 2011-11-20 20:32 深海的小鱼儿 阅读(1549) 评论(0) 推荐(0) 编辑

摘要:今天在看流量控制的代码时,特别留意了一下list_head的结构,发现它只有指针域,没有数据域,觉得有点困惑,一般的链表节点都包括两部分:数据域和指针域。linux里为何能这么用呢?股沟一下,原来是这么回事。在Linux内核链表中,不是在链表结构中包含数据,而是在数据结构中包含链表节点。 深入分析 Linux 内核链表 本文详细分析了 2.6.x 内核中链表结构的实现,并通过实... 阅读全文
posted @ 2011-11-20 20:26 深海的小鱼儿 阅读(570) 评论(0) 推荐(0) 编辑

摘要:《Linux内核设计与实现》 简称LKD,从入门开始,介绍了诸如进程管理、系统调用、中断和中断处理程序、内核同步、时间管理、内存管理、地址空间、调试技术等方面,内容比较浅显易懂,个人认为是内核新人首先必读的书籍。新人得有此书,足矣! 《深入理解Linux内核》 简称ULK,相比于LKD的内容不够深入、覆盖面不广,ULK要深入全面得多。 前面这两本,一本提纲挈领,一本全面深入... 阅读全文
posted @ 2011-11-20 19:48 深海的小鱼儿 阅读(4740) 评论(0) 推荐(2) 编辑

摘要:Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。 在下文将对进程的 R、S、D、T、Z、X 六种状态做个说明。 PROCESS STATE CODES Here are the different values that the s, stat and state output specifiers (header "S... 阅读全文
posted @ 2011-11-09 09:49 深海的小鱼儿 阅读(5310) 评论(0) 推荐(0) 编辑

摘要:1、/linux-2.6.30.4/arch/arm/include/asm/ 1.1、<asm/io.h>--->对应__raw__write()和__raw__read()等的使用 1.2、<asm/uaccess.h> ----> /* copy_to_user, copy_from_user */ 1.3、<asm/system.h>:系统头文件,定义了设置或修改描述符/中断门等的嵌... 阅读全文
posted @ 2011-11-09 09:34 深海的小鱼儿 阅读(3585) 评论(0) 推荐(0) 编辑

摘要:一个进程在其生存期内,可处于一组不同的状态下,称为进程状态,如图5-21所示。进程状态保存在进程任务结构的state字段中。当进程正在等待 系统中的资源而处于等待状态时,则称其处于睡眠等待状态。在Linux系统中,睡眠等待状态分为可中断的和不可中断的等待状态。 (点击查看大图)图5-21 进程状态及转换关系 (1)运行状态(TASK_RUNNING)。当进程正在被CPU执行,或... 阅读全文
posted @ 2011-11-09 09:20 深海的小鱼儿 阅读(1002) 评论(0) 推荐(0) 编辑

摘要:内核地址空间分布 直接映射区:线性空间中从3G开始最大896M的区间,为直接内存映射区,该区域的线性地址和物理地址存在线性转换关系:线性地址=3G+物理地址。 动态内存映射区:该区域由内核函数vmalloc来分配,特点是:线性空间连续,但是对应的物理空间不一定连续。vmalloc分配的线性地址所对应的物理页可能处于低端内存,也可能处于高端内存。 永久内存映射区:该区域可访问高端内存。访... 阅读全文
posted @ 2011-11-08 14:08 深海的小鱼儿 阅读(9161) 评论(1) 推荐(1) 编辑

摘要:1、实物图 2、CPU接线图 3、实际硬件接图 阅读全文
posted @ 2011-11-02 19:59 深海的小鱼儿 阅读(394) 评论(0) 推荐(0) 编辑

1 2 下一页