linux-2.6.35内核移植—网卡驱动的添加
一、解压内核:
$tar xvf linux-2.6.35.tar.bz2
$cd linux-2.6.35
二、修改顶层Makefile
ARCH?=arm (注意arm后边不能有空格,因为arm是作为一个目录来使用的)
CROSS_COMPILE?=arm-none-linux-gnueabi-
三、拷贝配置文件 (当前目录是linux-2.6.35/)
$cp arch/arm/configs/s3c2410_defconfig .config
四、将cs8900.c和cs8900.h两个文件拷贝到 linux-2.6.35/drivers/net/arm/下。
五、修改Kconfig添加我们自己的cs8900内核配置菜单项
修改linux-2.6.35/drivers/net/arm/Kconfig添加如下内容:
config S3C2410_CS8900
tristate “CS8900 support”
depends on NET_ETHERNET && ARM && ARCH_SMDK2410
---help---
support for cs8900 chipset base Ethernet cards, if you have a network card of this type.
六、修改Makefile添加内核编译配置
修改driver/net/arm/Makefile添加如下内容:
obj-$(CONFIG_S3C2410_CS8900) += cs8900.o
七、添加地址映射定义
修改arch/arm/mach-s3c2410/include/mach/map.h文件,添加如下内容:
/* CS8900a */
#define pSMDK2410_ETH_IO__phys_to_pfn(0x19000000)
#define vSMDK2410_ETH_IO0xE0000000
#define SMDK2410_ETH_IRQIRQ_EINT9
八、添加平台代码
修改arch/arm/mach-s3c2410/mach-smdk2410.c文件,添加如下内容:
static struct map_desc smdk2410_iodesc[] __initdata = {
/* nothing here yet */
{vSMDK2410_ETH_IO, pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE} //添加内容
};
九、配置内核,使之支持cs8900网卡
$ makemenuconfig
KernelFeatures ---> //使用EABI工具链这两项是必须选择的
[*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with thiskernel (EXPERIMENTAL) (NEW)
DeviceDrivers --->
[*]Network device support --->
[*] Ethernet (10 or 100Mbit) --->
<*> CS8900 support
十、重新编译内核
$ make zImage
11、拷贝zImage到tftpboot目录下并重新启动开发板
$ cp arch/arm/boot/zImage /tftpboot /*tftp目录是我们自己建立的tftp服务的根目录*/
十一、解压我们的文件系统到ubuntu系统的根目录下的"/source"
tar xvf rootfs.tar.gz -C /source
十二、开发板上电(前提是烧好我们的u-boot进去)
setenv bootcmd tftp 33000000 zImage\; go 33000000
setenv bootargs root=nfs nfsroot=192.168.1.7:/source/rootfs console=ttySAC0,115200 init=/linuxrc ip=192.168.1.7