Linux驱动学习之Linux-2.6.20.4内核移植

最近一段时间一直在学习向TQ2440开发板移植内核、移植驱动。真心觉得这方面的知识有很大的难度。但是从另一角度去看,难度越大,能力提升的空间就越大!!

1、解压源码

从网上下载一个Linux 内核,我是用的是Linux-2.6.20.4。然后用命令解压。建议解压到“/home/用户名”目录下。我的内核源码存放在:

2、添加对ARM的支持

因为所用的是TQ2440开发板,属于ARM9。因此要在系统中添加对ARM的支持。

方法:进入内核源码目录,

修改“Makefile”文件,将193行的“ARCH ?=(SUBARCH)”与194行“CROSS_COMPILE?=”将其修改为(如图)

也可以在第一次使用“make menuconfig”时使用“make  ARCH=arm  CROSS_COMPILE=arm-linux-  menuconfig ”来代替。记得有一次忘记了修改对ARM的支持,结果在配置的时候好多的选项都没有,一开始还以为是内核的原因,于是重新下载了内核,结果还是一样。愚蠢的错误啊!!!!贴出来,刺激一下自己!

修改前的配置菜单:

修改后的配置菜单:

3、交叉编译器环境搭建

4、时钟频率修改

TQ2440使用的是12MHz的外部时钟源,而相应的配置文件中是16.9344MHz,打开下面的文件:

修改下面的函数:

5、修改机器码

在TQ2440使用的uboot中设定的机器码是168,所以内核这里需要修改机器码,否则会出现不能启动的情况。此参数保存在内核源码的“arch/arm/tools/mach-tupes”中。在编译第一个内核的时候,内核能成功下载到开发板上,但是就是无法启动。刚开始还认为是内核编译太大的原因,裁剪了很多的东西之后,还是无法启动。经一个队友提示“是否改了机器码”,我还很自信的说“已经改过了”,到了最后查看一下文件,机器码木有改啊~~~~~~~~~~~

6、Nand Flash 驱动移植

进入内核源码“arch/arm/plat-s3c24xx/common-smdk.c”,修改如下两个位置的代码(修改后的)

如下图:

(1)

(2)

然后打开

修改第752行的代码如图所示:

7、添加对yaffs的支持

可以通过命令来获取yaffs的源码:git clone git://www.alcphl.co.uk/yaffs2

然后进入到yaffs2目录下,打补丁到内核中,使用下面的命令:

./patch-ker.sh c m /home/xg/linux_arm/linux-2.6.30.4/(内核所在的目录)

Linux驱动学习之Linux-2.6.20.4内核移植

时间: 2024-08-03 23:11:59

Linux驱动学习之Linux-2.6.20.4内核移植的相关文章

linux 驱动学习笔记02--应用实例:在内核中新增驱动代码目录和子目录

下面来看一个综合实例,假设我们要在内核源代码 drivers 目录下为 ARM 体系结构新增如下用于 test driver 的树型目录:| --test  | -- cpu  | -- cpu.c  | -- test.c  | -- test_client.c  | -- test_ioctl.c  | -- test_proc.c  | -- test_queue.c在内核中增加目录和子目录,我们需为相应的新增目录创建 Makefile 和 Kconfig 文件,而新增目录的父目录中的 K

linux驱动学习之tasklet分析

tasklet是中断处理下半部分最常用的一种方法,驱动程序一般先申请中断,在中断处理函数内完成中断上半部分的工作后调用tasklet.tasklet有如下特点: 1.tasklet只可以在一个CPU上同步地执行,不同的tasklet可以在不同地CPU上同步地执行. 2.tasklet的实现是建立在两个软件中断的基础之上的,即HI_SOFTIRQ和TASKLET_SOFTIRQ,本质上没有什么区别,只不过HI_SOFTIRQ的优先级更高一些 3.由于tasklet是在软中断上实现的,所以像软中断一

Linux驱动学习之TQ2440 DM9000E网卡驱动移植(Linux-2.6.30.4)

引言 在之前的文章中,我们介绍了如何使用Scala IDE也就是eclipse中集成的Scala开发插件来进行Scala语言程序的开发,在使用了一段时间之后,发现eclipse对Scala的支持并不是很好.用户体验比较差,比如联想速度比较慢等.由于在公司一直使用的Scala开发工具是Intellij IDEA(好吧,其实我使用Scala IDE的目的就是想试一下这两个各有什么优缺点),各方面感觉还不错,所以在此介绍一下这个开发环境. Intellij IDEA是jetbrain开发的一个IDE,

linux 驱动学习笔记01--Linux 内核的编译

由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make config(基于文本的最为传统的配置界面,不推荐使用)#make menuconfig(基于文本菜单的配置界面)#make xconfig(要求 QT 被安装)#make gconfig(要求 GTK+被安装)在配置 Linux 2.6 内核所使用的 make config. make menuconfig. mak

Linux 程序设计学习笔记----Linux下文件类型和属性管理

转载请注明出处:http://blog.csdn.net/suool/article/details/38318225 部分内容整理自网络,在此感谢各位大神. Linux文件类型和权限 数据表示 文件属性存储结构体Inode的成员变量i_mode存储着该文件的文件类型和权限信息.该变量为short int类型. 这个16位变量的各个位功能划分为: 第0-8位为权限位,为别对应拥有者(user),同组其他用户(group)和其他用户(other)的读R写W和执行X权限. 第9-11位是权限修饰位,

linux 驱动学习(一)简单的字符设备驱动程序

linux 系统将设备分为三种类型:字符设备.块设备和网络接口设备. 文章将先给出字符设备驱动程序,参照程序记录知识点,可能会不全,以后会慢慢加 .知识点记录完成后,会贴出字符设备驱动程序的测试程序并记录测试过程. 注释版 1 #include "linux/kernel.h" //内核头文件,含有一些内核常用函数的原形定义 2 #include "linux/module.h" //包含大量加载模块需要的函数和符号的定义 3 #include "linu

Linux驱动学习步骤(转载)

1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出. 5. 写一完整驱动, 加上read, write, ioctl, polling等各种函数的驱动实现. 在ioctl里完成从用户空间向内核空间传递结构体的实现. 6. 写一bl

linux驱动学习(1)——字符设备驱动开发

(一)驱动程序介绍 (a)Linux驱动程序学习 知识结构: 1. Linux驱动程序设计模式(40%) 2. 内核相关知识(30%) 3. 硬件相关知识(30%) (b)驱动分类: ①字符设备: 字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常实现 open, close,read和 write 系统调用. ②块设备: 在大部分的 Unix 系统, 块设备不能按字节处理数据,只能一次传送一个或多个长度是512字节( 或一个更大的 2 次幂的数 )的整块数据,而Lin

【Linux驱动学习】SD卡规范学习

摘要: 学习SD卡的相关规范,包括定义,硬件特性,数据传输,命令系统等.不涉及代码. 文章针对Linux驱动开发而写,以助于理解SD卡驱动,不会涉及过多硬件内容. 纲要: 1. SD卡介绍 2. SD卡硬件规范 3. SD卡指令规范 4. SD卡寄存器 1. SD卡介绍 1.1 各类型储存卡/接口 首先了解一下我们在SD卡驱动学习中会碰到的主要几个储存卡名词: SD:Security Digital Memory Card,新一代多媒体储存卡,高速,安全(但安全机制貌似很少用到)MMC:Mult