
Linux驱动开发
文章平均质量分 80
LinuxSir_MianMian
这个作者很懒,什么都没留下…
展开
-
2、根文件系统的制作
根文件系统的制作:首先要用busybox编译出文件系统所需要的应用程序,然后再做文件系统开发平台:ubuntu 8.10开发工具及软件:cross_compile 4.3.3(EABI) busybox-1.16.0 一.交叉编译busyboxBosybox原创 2011-08-23 14:42:56 · 552 阅读 · 0 评论 -
11、Linux内核启动过程和Bootloader(总述)
1.Linux内核启动过程概述 一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader),Linux 内核,文件系统,应用程序。其中 Bootloader是系统启动或复位以后执行的第一段代码,它主要用来初始化处理器及外设,然后调用 L转载 2011-08-23 14:55:29 · 489 阅读 · 0 评论 -
14、linux2.6.31--LCD驱动移植
2.6.31.6已经包含了s3c2440的frame buffer LCD驱动了,我们要做的就是传递正确的platform_data给内核就可以了1)修改LCD参数设置根据实际的LCD屏的物理尺寸大小,修改platform_data结构中的s3c2410fb_displa原创 2011-08-23 15:01:56 · 470 阅读 · 0 评论 -
15、Linux2.6.31--网卡驱动移植(DM9000)
DM9000网卡驱动的移植。2.6.31.5中自带的dm9000.c可以满足TQ2440开发板上的DM9000网卡的要求,因此可以以2.6.31.5自带的dm9000为基础进行移植。下面是具体的移植步骤: 1) 添加网卡驱动的平台数据信息,包括:网卡的资源(地址资源、数据资源原创 2011-08-23 15:03:19 · 528 阅读 · 0 评论 -
16、linux2.6.31--NAND FLASH驱动移植
1)改变分区时,修改“arch/arm/plat-s3c24xx/common-smdk.c”文件中的smdk_default_nand_part结构体即可#vim arch/arm/plat-s3c24xx/common-smdk.c,添加自己的分区即可,如下所示:FL原创 2011-08-23 15:04:13 · 484 阅读 · 0 评论 -
27、(6)Linux内核启动引导阶段之 __enable_mmu函数分析
开启MMU在进入 __enable_mmu 的时候, r0中已经存放了控制寄存器c1的一些配置(在上一步中进行的设置), 但是并没有真正的打开mmu此时,一些特定寄存器的值如下所示: r0 = c1 parameters (用来配置控制寄存器的参原创 2011-08-23 15:54:50 · 993 阅读 · 0 评论 -
28、(7)Linux内核引导阶段之 __switch_data(切换数据)
完成的工作:复制数据段、清除BSS段、设置栈指针、保存CPU ID到processor_id变量、保存机器类型ID到__machine_arch_type变量、调用start_kernel 在 arch/arm/kernel/head-common.S 中: 00原创 2011-08-23 16:00:26 · 1096 阅读 · 1 评论 -
30、Linux Platform Device and Driver
作者: Dongas 日期: 08-06-27 从 Linux 2.6 起引入了一套新的驱动管理和注册机制 :Platform_device 和 Platform_driver 。Linux 中大部分的设备驱动,都可以使用这套机制 , 设备用 Platfo转载 2011-08-23 17:54:14 · 561 阅读 · 0 评论 -
22、(1)Linux内核启动分析 “arch/arm/kernel/head.S” 以及流程图
内核启动总流程图“arch/arm/kernel/head.S”是内核执行的第一个文件,U-Boot调用内核前,必须满足的条件如下: (1)CPU寄存器的设置 R0 = 0 R1 = 机器类型ID原创 2011-08-23 15:36:13 · 1017 阅读 · 0 评论 -
1、linux内核移植
操作系统:ubuntu 8.10交叉编译工具:arm-linux-gcc 4.3.3内核:从2.6.30.6移植到2.6.31.6中一、移植内核1.解压内核源码 从www.kernel.org/下载源码包:linux-2.6.31.6.tar.gz,并解压原创 2011-08-23 14:41:35 · 322 阅读 · 0 评论 -
18、Bootloader(2)--Bootloader与内核的交互,或者说传参
Bootloader与内核的交互是单向的,Bootloader将各类参数传给内核,由于它们不能同时运行,传递办法只有一个:Bootloader将参数放在某个约定的地方之后,再启动内核,内核启动后从这个地方获得参数(参数地址) 参数的地址约定好后,还要规定参数的结构,原创 2011-08-23 15:06:09 · 682 阅读 · 0 评论 -
17、Bootloader(1) ---Bootloader的结构
一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader),Linux 内核,文件系统,应用程序:1)Bootloader 系统启动或复位以后执行的第一段代码,它主要用来初始化处理器及外设,然后调用 Linux 内核。2)Lin原创 2011-08-23 15:05:11 · 634 阅读 · 1 评论 -
19、Bootloader(3) -- U-Boot第一阶段代码start.S分析
/********************************************************************Bootloader第一阶段的功能:(运行在Flash当中) -- 硬件设备初始化 (cpu/arm920t/star原创 2011-08-23 15:07:45 · 607 阅读 · 0 评论 -
24、(3)Linux内核启动之 __lookup_machine_type
__lookup_machine_type函数 1. 内核中对于每种支持的开发板都会使用宏MACHINE_START、MACHINE_END来定义一个machine_desc结构,它定义开发板相关的一些属性及函数,比如机器类型ID、起始I/O物理地址、Bootlo原创 2011-08-23 15:39:06 · 762 阅读 · 0 评论 -
10、ubuntu和busybox下用make menuconfig配置出错解决
# make menuconfigIn file included from scripts/kconfig/lxdialog/checklist.c:24:scripts/kconfig/lxdialog/dialog.h:31:20: error: curses.原创 2011-08-23 14:52:38 · 708 阅读 · 0 评论 -
9、UBOOT提供的基本命令
Printenv 打印环境变量。Uboot> printenvbaudrate=115200ipaddr=192.168.1.1ethaddr=12:34:56:78:9A:BCserverip=192.168.1.5Environment size: 8原创 2011-08-23 14:52:00 · 298 阅读 · 0 评论 -
4、linux2.6.31---看门狗驱动的移植
1.看门狗驱动的移植 《如果不移植看门狗驱动,则开发板根文件系统过15秒会后重启》 1) 启动watchdog功能。编辑drivers/watchdog/s3c2410_wdt.c文件且修改#define CONFIG_S3C2410_WATCHDOG_ATBOOT原创 2011-08-23 14:47:04 · 481 阅读 · 0 评论 -
5、linux设备驱动---内存申请
动态内存分配: (1)kmalloc(size_t size , int flag)和kfree(const void *addr) 分配内核内部的动态内存,内存分配速度快,但是大小限制在 32*PAGE_SIZE(即32*4K)以内原创 2011-08-23 14:48:04 · 394 阅读 · 0 评论 -
6、linux设备驱动---中断
1.1 中断的分类1.根据中断来源,中断可分为内部中断和外部中断 内部中断:中断源来自CPU内部,如软件中断指令、溢出、除法错误等 外部中断:中断源来自CPU外部,由外设提出请求2.根据中断是否可以屏蔽,分为可屏蔽中断和不可屏蔽中断(NMI) 可屏蔽中断原创 2011-08-23 14:48:48 · 360 阅读 · 0 评论 -
7、linux设备驱动--并发控制
1.并发与竞态并发指的是多个执行单元同时、并行被执行,而并发的执行单元对共享资源(全局变量、静态变量)的访问容易导致竞态。 2.中断屏蔽原创 2011-08-23 14:50:08 · 1428 阅读 · 0 评论 -
8、linux设备驱动--阻塞型输入输出
1.阻塞与非阻塞I/O 阻塞操作:在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足原创 2011-08-23 14:51:19 · 365 阅读 · 0 评论 -
12、Linux源码下Makefile详解(参照Documentation\kbuild\makefiles.txt和资料)(
1.Makefile的作用 (1)决定编译哪些文件 (2)怎样编译这些文件 (3)怎样连接这些文件,最重要的是它们的顺序如何2.Linux内核Makefile分类********************************************原创 2011-08-23 14:58:17 · 836 阅读 · 0 评论 -
20、Bootloader(4) -- U-Boot第二阶段分析
********************************************************************/Bootloader第二阶段的功能:(运行在内存当中) -- 初始化本阶段要使用到的硬件设备(串口、网口类的硬件)原创 2011-08-23 15:08:31 · 439 阅读 · 0 评论 -
21、Bootloader(5)---Uboot的移植
一、移植准备1. U-Boot源码下载地址 http://sourceforge.net/project/u-boot ftp://ftp.denx.de/pub/u-boot/U-BOOT邮件列表下载: http://lists.sourceforge原创 2011-08-23 15:34:51 · 628 阅读 · 0 评论 -
25、(4)Linux内核启动引导阶段之 __create_page_table函数分析
此时,一些特定寄存器的值如下所示: r8 = machine info (struct machine_desc的基地址) r9 = cpu id (通过cp15协处理器获得的cpu id) r10 = procinfo转载 2011-08-23 15:44:27 · 1168 阅读 · 0 评论 -
26、(5)Linux内核启动引导阶段之 __arm920_steup函数分析
此函数的功能主要是:禁止ICache、DCache、数据Cache、指令Cache 在 arch/arm/kernel/head.S 中:363 .type __arm920_setup, #function //函数364 __arm920原创 2011-08-23 15:49:55 · 688 阅读 · 0 评论 -
29、(8)Linux内核启动第二阶段之 setup_arch函数分析
此函数在arch/arm/kernel/setup.c中定义 void __init setup_arch(char **cmdline_p){ struct tag *tags = (struct tag *)&init_tags; struct原创 2011-08-23 16:03:37 · 626 阅读 · 0 评论 -
31、 2410下DMA驱动源码分析
首先我们由 kconfig 和 makefile 来获取 DMA 方面相关文件 ( 即源码 ): Arch/arm/plat-s3c24xx/Dma.c Arch/arm/mach-s3c2410/Dma.c 以上两个就是操作 DMA 的核心文转载 2011-08-23 17:58:31 · 537 阅读 · 0 评论 -
3、Linux设备驱动---轮询操作poll()函数
1.轮询的概念和作用 使用非阻塞I/O的应用程序通常会使用select()和poll()系统调用查询是否可对设备进行无阻塞的访问。select()和poll()系统调用最终会引发设备驱动中的poll()函数被执行。2.应用程序中的轮询编程---select()函数原创 2011-08-23 14:45:25 · 526 阅读 · 0 评论 -
23、(2)Linux内核启动分析之 __lookup_processor_type函数
__lookup_processor_type函数,确定内核是否支持当前CPU,如果支持,r5寄存器返回一个用于描述处理器的结构体的地址,否则r5 = 0 __lookup_processor_type函数根据前面读出的CPU ID(存在r9寄存器中),从这些proc_原创 2011-08-23 15:37:58 · 1065 阅读 · 0 评论