【转】 linux内核移植和网卡驱动(二)
原文网址: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
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内核移植和网卡驱动(二)的更多相关文章
- LINUX 内核移植以及网卡驱动添加
我用的板子是sama5d3xek,原来板子内核是linux-at91-3.13,升级使用linux-at91-4.10 首先去官网下载一个linux—at91-4.10压缩包,然后在ubuntu里解压 ...
- 基于tiny4412的Linux内核移植 -- DM9621NP网卡驱动移植(四)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- LINUX内核升级-更新网卡驱动
因项目需要,将当前内核(2.6.32-220.el6.x86_64)升级到目标内核(2.6.33-110.el6.x86_64),但是编译的目标 内核(2.6.33-110.el6.x86_64)的对 ...
- 基于tiny4412的Linux内核移植 -- SD卡驱动移植(五)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 【转】 linux内核移植和驱动添加(三)
原文网址:http://blog.chinaunix.net/uid-29589379-id-4708909.html 原文地址:linux内核移植和驱动添加(三) 作者:genehang 四,LED ...
- linux 内核移植和根文件系统的制作【转载】
原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...
- linux 内核移植和根文件系统的制作
1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1 Linux版本 Linux内核的版本号 ...
- 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- Linux网卡驱动移植--Dm9000网卡驱动分析
1. Linux网络体系结构由以下5部分组成 ① 系统调用接口: 位于Linux网络子系统的顶部,为应用程序提供访问内核网络子系统的方法,主要指socket系统调用. ② 协议无关接口: 实现一组基于 ...
随机推荐
- c#提出中文首字母
; i < len; i++) { myStr += getSpell(strText.Substring(i, )); ...
- jquery UI推荐
Bootstrap http://www.bootcss.com/ http://www.ligerui.com/ http://j-ui.com/#demo_page2 http://jqueryu ...
- ACM1174_爆头解题思路_空间三维坐标求点到直线的距离
/* 爆头 Description gameboy是一个CS高手,他最喜欢的就是扮演警察, 手持M4爆土匪的头.也许这里有人没玩过CS,有必 要介绍一下“爆头”这个术语:所谓爆头,就是子 弹直接命中对 ...
- linux指定动态运行库的位置
动态运行库在windows.linux下均广泛使用.windows下通常为dll文件,linux下为so文件.不过,对于部署程序,这两个系统查找依赖的运行库文件时却不一样.对于windows而言,优先 ...
- Hibernate PO对象的状态
Hibernate的PO对象有三种状态:临时状态(又称临时态).持久状态(又称为持久态)和脱管状态(又称为脱管态.游离态).处理持久态的对象也称为PO,临时对象和脱管对象也称为VO. 1.临时态: 简 ...
- Hacker(12)----个人计算机安全防护策略
了解了黑客的常用入侵方法,针对这些方法分别指定对应的防护策略不太现实,因此用户只能掌握个人计算机安全的常见防护策略,以确保计算机处在一个相对安全的环境中.常见个人计算机防护策略有:安装并及时升级杀毒软 ...
- CentOS6.5 --安装orale 11g(下)
(7) 建立Oracle系统用户和安装目录 创建一个主组oinstall和一个副组dba.命令如下: groupadd oinstall groupadd dba 创建oracle安装文件 m ...
- oracle 语句汇总
Oracle数据库常用sql语句 ORACLE 常用的SQL语法和数据对象 一.数据控制语句 (DML) 部分 1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1 ...
- (原)Ubuntu16中使用nvidia官方提供的驱动,而非自带的驱动
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5638185.html 安装完ubuntu16后,显卡显示的是Gallium... 在“设置-软件和更新 ...
- YUI Array 之each| forEach(遍历)
1. yui-each原码: 遍历YArray.each = YArray.forEach = Lang._isNative(Native.forEach) ? function (array, fn ...