原文网址:http://blog.chinaunix.net/uid-29589379-id-4708911.html

一,内核移植步骤:

1, 修改顶层目录下的Makefile

ARCH            ?= $(SUBARCH)

CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%)

修改为:

ARCH :=arm

CROSS_COMPILE :=/usr/local/arm/4.4.3/bin/arm-linux-

2, 拷贝配置文件

这里用的是FS2410开发板,拷贝相应的板文件到顶层目录下

cp arch/arm/configs/s3c2410_defconfig ./

编译配置文件,生成.config文件:

Make s3c2410_defconfig

内核配置的目的:

.config文件记录了哪些部分会被编译进内核,哪些部分会被编译成内核模块,内核在编译前,寻找.config文件,作为他编译的准则。即.config文件是给Makefile来读

3,1)选择板子

在arch/arm/mach-s3c2410/Kconfig中,修改相应的配置

root@mach-s3c2410#  vim Kconfig

root@mach-s3c2410#  pwd

/change/linux-3.1.4/arch/arm/mach-s3c2410

config ARCH_SMDK2410

bool "SMDK2410/A9M2410"

select CPU_S3C2410

select MACH_SMDK

help

Say Y here if you are using the SMDK2410 or the derived module A9M2410

http://www.fsforth.de

改成:

config ARCH_SMDK2410

bool "SMDK2410"

select CPU_S3C2410

select MACH_SMDK

select S3C_DEV_USB_HOST

select S3C_DEV_NAND

select S3C2410_SETUP_TS

help

Say Y here if you are using the SMDK2410 or the derived module A9M2410

http://www.fsforth.de

2)选配资源,这里用的是fs2410开发板,可以在/arch/arm/kconfig中选配

if ARCH_S3C2410

#source "arch/arm/mach-s3c2400/Kconfig"

s3c2410目标板:

source "arch/arm/mach-s3c2410/Kconfig"

#A8目标板:

#source "arch/arm/mach-s5pc100/Kconfig"

#source "arch/arm/mach-s3c2412/Kconfig"

#source "arch/arm/mach-s3c2416/Kconfig"

#source "arch/arm/mach-s3c2440/Kconfig"

#source "arch/arm/mach-s3c2443/Kconfig"

endif

4, 内核配置

1) General setup  --->

[*] Prompt for development and/or incomplete code/drivers(可选)

[*] Automatically append version information to the version string│

Kernel compression mode (Gzip)  --->

2)[*] Enable loadable module support  --->

[*]   Forced module loading

[*]   Module unloading

[*]     Forced module unloading

[*]   Module versioning support

3)System Type  --->(选板子)

S3C2410 Machines  --->

[*] SMDK2410/A9M2410(只选择此项)

[ ] IPAQ H1940(选择后下载地址会在31008000)

4)Kernel Features  --->

[*] Use the ARM EABI to compile the kernel

[*]   Allow old ABI binaries to run with this kernel (EXPERIMENTAL

[*] Provide old way to pass kernel parameters

5)Userspace binary formats  --->

[*] Kernel support for ELF binaries

[*] Write ELF core dumps with partial segments

< > Kernel support for a.out and ECOFF binaries(此项不选,选择后会报某些错)

6)Networking support

Networking options  --->

[*] TCP/IP networking

……

7)Device Drivers  --->  (设备驱动,根据需要添加修改,如网卡,led,lcd,beep等)

[*] Network device support  --->(网卡设备支持)

Character devices  --->  (字符设备支持,如:led,lcd)

<*> Multimedia support  --->(多媒体支持,如:V4L2)

[*] USB support  --->(USB支持)

8)File systems  --->(文件系统,支持yaffs2,crmfs等)

[*] Network File Systems  --->(网络文件系统)

<*>   NFS client support

[*]   Root file system on NFS

5, 内核编译并拷贝到tftpboot下

make zImage

cp arch/arm/boot/zImage /tftpboot

6, 查看内存映射表:

root@linux-3.1.4#  vim System.map

从内存映射表中可以知道下载地址

说明:以上的相关配置是针对arm平台的基本配置。如果想实现文件共享,led,lcd驱动等,则可以在此基础上修改和添加。

二,Nand flash驱动的添加

目的:nand flash 是默认配置的,只是他的分区可以根据我们的实际情况来配置

1, 修改分区信息表

在arch/arm/plat-s3c24xx/common-smdk.c中有nand flash的分区信息,根据我们实际生产中的需要,进行一些修改:

static struct mtd_partition smdk_default_nand_part[] = {

[0] = {

.name   = "uBoot",

.size   = 0x40000,

.offset = 0,

},

[1] = {

.name   = "kernel",

.offset = 0x40000,

.size   = 0x400000,

},

[2] = {

.name   = "fs",

.offset = 0x440000,

.size   = 0x800000,

},

[3] = {

.name   = "extern fs",

.offset = 0xc40000,

.size   = 0x33c0000,

},

}

name: 代表分区名字

size: 代表flash分区大小(单位:字节)

offset: 代表flash分区的起始地址(相对于0x0的偏移)

2,在此前的基础上配置内核:

Device Drivers  --->

<*> Memory Technology Device (MTD) support  --->

<*>   NAND Device Support  --->

<*>   NAND Flash support for Samsung S3C SoCs

3,编译好,移植到开发板后可以看见这样的打印信息:

Creating 4 MTD partitions on "NAND":

0x000000000000-0x000000040000 : "uB00t"

0x000000040000-0x000000440000 : "kernel"

0x000000440000-0x000000c40000 : "fs"

0x000000c40000-0x000004000000 : "extern fs"

三,网卡驱动的添加:

目的:将网卡驱动移植到linux-3.1.4内核上,使其可以通过网络nfs的方式挂载主机环境上的文件系统,从而实现linux系统的启动

在此前的内核移植的步骤上面进行以下的修改和配置:

1, 我们这里用到的网卡是cs8900。将已经下载好的网卡驱动程序cs8900.c和cs8900.h两个文件拷贝到驱动下

root@linux-3.1.4#  cp ……/cs8900.* drivers/net/arm

2, 修改drivers/net/arm/Kconfig 添加cs8900的配置项:

root@linux-3.1.4#  cd drivers/net/arm/

root@arm#  vim Kconfig

进行以下的配置(添加):

config ARM_CS8900

tristate "cs8900 support"

depends on ARM

help

support cs8900

3, 修改drivers/net/arm/Makefile 添加内核编译配置:

root@arm#  vim Makefile

添加一下的内容:

obj-$(CONFIG_ARM_CS8900) +=cs8900.o

4, 添加地址映射:

在arch/arm/plat-s3c24xx/include/plat/map.h添加宏定义:

root@linux-3.1.4#  vim arch/arm/mach-s3c2410/include/mach/map.h

#define S3C24XX_VA_CS8900 0xE0000000

#define S3C24XX_PA_CS8900 0x19000000

#define S3C24XX_SZ_CS8900 SZ_1M

5, 添加平台代码

在arch/arm/mach-s3c2410/mach-smdk2410.c中添加:

root@linux-3.1.4#  vim arch/arm/mach-s3c2410/mach-smdk2410.c

static struct map_desc smdk2410_iodesc[] __initdata = {

IODESC_ENT(CS8900)}

6, 虚拟地址到物理地址的转换:

查看arch/arm/plat-samsang/include/plat/cpu.h

root@linux-3.1.4#  vim arch/arm/plat-samsung/include/plat/cpu.h

#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x,

__phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE }

7, 一点说明:在linux-3.1.4内核的网卡驱动里面加入了中断处理机制

添加:

#include <linux/interrupt.h>

将set_irq_type(dev->irq, (1<<1)||(1<<0));修改为:

irq_set_irq_type(dev->irq, (1<<1)||(1<<0));

8, 内核配置,使之支持cs8900网卡:

Device Drivers  --->

[*] Network device support  --->

[*]   Ethernet (10 or 100Mbit)  --->

<*>   cs8900 support

9, 重新编译内核

make zImage

10,网卡移植好了可以再板子上面看见以下信息:

Cirrus Logic CS8900A driver for Linux (Modified for SMDK2410)

eth0: CS8900A rev E at 0xe0000300 irq=53, addr: 00: 0:3E:26:0A: 0

说明:上一篇文章,直接粘贴了图片,但是基本上不能看清楚,因而此篇文章就直接写的哈。

【转】 linux内核移植和网卡驱动(二)的更多相关文章

  1. LINUX 内核移植以及网卡驱动添加

    我用的板子是sama5d3xek,原来板子内核是linux-at91-3.13,升级使用linux-at91-4.10 首先去官网下载一个linux—at91-4.10压缩包,然后在ubuntu里解压 ...

  2. 基于tiny4412的Linux内核移植 -- DM9621NP网卡驱动移植(四)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  3. LINUX内核升级-更新网卡驱动

    因项目需要,将当前内核(2.6.32-220.el6.x86_64)升级到目标内核(2.6.33-110.el6.x86_64),但是编译的目标 内核(2.6.33-110.el6.x86_64)的对 ...

  4. 基于tiny4412的Linux内核移植 -- SD卡驱动移植(五)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  5. 【转】 linux内核移植和驱动添加(三)

    原文网址:http://blog.chinaunix.net/uid-29589379-id-4708909.html 原文地址:linux内核移植和驱动添加(三) 作者:genehang 四,LED ...

  6. linux 内核移植和根文件系统的制作【转载】

    原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...

  7. linux 内核移植和根文件系统的制作

    1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1  Linux版本 Linux内核的版本号 ...

  8. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  9. Linux网卡驱动移植--Dm9000网卡驱动分析

    1. Linux网络体系结构由以下5部分组成 ① 系统调用接口: 位于Linux网络子系统的顶部,为应用程序提供访问内核网络子系统的方法,主要指socket系统调用. ② 协议无关接口: 实现一组基于 ...

随机推荐

  1. UITableView系列(1)---Apple缓存池机制

    一.概述 关于UITableView的基本使用, 其实十分简单.但是做App最重要的之一就是细致,技术方面要做到细致, 必须深入了解底层, 才能做出优化让程序跑得更快.那么这一系列文章从我实际项目中获 ...

  2. Mysql数据库乱码与编码问题筛查

    最近接连遇到数据库编码问题,让你的系统本来像个美丽的姑娘却忽然发现她不识字一样难受,其实很多时候是编码的问题,而mysql(特别地)设计编码的地方很多,在这里做一个筛查: 1 mysql编码 用下面的 ...

  3. python高级编程之描述符与属性03

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #属性Property #提供了一个内建描述符类型,它知道如何将一个 ...

  4. MooseFS源代码分析(三)

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...

  5. class、interface、struct的差别

    1 struct和class有什么差别 1.1默认的继承訪问权限 Struct是public的,class是private的. 你能够写例如以下的代码: struct A { char a; }; s ...

  6. Swiper滑动Html5手机浏览器自适应

    手机网页能通过window.screen.height, width获取屏幕分辨率,于是能够通过分辨率比率来计算高度. window.onload=function(){ var swiper = d ...

  7. LR如何监控tomcat性能

    使用LoadRunner做性能测试,一般的直觉是LR只能完成脚本录制和编写模拟用户的请求行为,但是在某些情况下,要监控一些中间件或web服务器的性能时,就不能通过录制脚本来完成了,那么就需要手工来编写 ...

  8. Hacker(14)----扫描目标计算机端口

    端口是目前计算机与外界的通道,因而黑客一旦锁定目标计算机,便会扫描该计算机中已经开放的端口,从而得到更多的有用信息.扫描目标计算机端口一般使用SuperScan.X-Scan等. 一.端口扫描原理 扫 ...

  9. Linux下安装软件的错误

    1. make configure GEN configure/bin/sh: 1: autoconf: not foundmake: *** [configure] Error 127 解决:sud ...

  10. JS 事件对象和事件冒泡

    1.事件对象 js的事件对象中保存了当前被触发事件的一些相关的属性信息,如事件源.事件发生时的鼠标位置.事件按键等. 事件对象的获取方法: IE中可以window.event直接获取,而Firefox ...