Linux内核配置和编译
资源有:linux-2.6.35.tar.bz2
第一步:
将linux-2.6.35.tar.bz2放到/hyg下面:
$ tar xvf linux-2.6.35.tar.bz2
$ cd linux-2.6.35
修改Makefile(这里主要是配置内核要适应的平台,以及要通过什么编译器来编译)
大约在Makefile的190行左右:
Vi Makefile
ARCH ?= arm
CROSS_COMPILE ?= arm-cortex_a8-linux-gnueabi-
//拷贝标准板配置文件(这里的配置文件,平台是指定的,如果是不同的平台,我就不清楚了,自己可以查阅网络)
$ cp arch/arm/configs/s5pc100_defconfig .config
//配置内核,下面这一步,是要激活.config文件,如果不用下面的话,会出现命令行的配置
$ make menuconfig
//该命令执行时会弹出一个菜单,我们可以对内核进行详细的配置。这里我们先查看一下,内核都提供了那些功能!
//编译内核
$ make zImage
//通过上述操作我们能够在arch/arm/boot目录下生成一个zImage文件,这就是经过压缩的内核镜像。
第二步:网卡驱动的移植(如果不做该步,将会导致不能通信)
//平台代码修改
vim arch/arm/mach-s5pc100/mach-smdkc100.c
//添加需要的头文件
#if defined (CONFIG_DM9000)
#include <linux/dm9000.h>
#include <linux/irq.h>
#endif
//平台设备的添加
/* DM9000 Support */
#if defined(CONFIG_DM9000)
static struct resource dm9000_resources[] = {
[0] = {
.start = 0x88000000,
.end = 0x88000000 + 0x3,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = 0x88000000 + 0x4,
.end = 0x88000000 + 0x4 +0x3,
.flags = IORESOURCE_MEM,
},
[2] = {
.start = IRQ_EINT(10),
.end = IRQ_EINT(10),
.flags = IORESOURCE_IRQ | IRQ_TYPE_LEVEL_HIGH,
},
};
static struct dm9000_plat_data s5pc100_dm9000_platdata = {
.flags = DM9000_PLATF_16BITONLY,
.dev_addr[0] = 0x00,
.dev_addr[1] = 0x00,
.dev_addr[2] = 0x3e,
.dev_addr[3] = 0x26,
.dev_addr[4] = 0x0a,
.dev_addr[5] = 0x00,
};
static struct platform_device s5pc100_device_dm9000 = {
.name = "dm9000",
.id = -1,
.num_resources = ARRAY_SIZE(dm9000_resources),
.resource = dm9000_resources,
.dev = {
.platform_data = & s5pc100_dm9000_platdata,
}
};
#endif
//平台设备列表的添加:
在smdkc100_devices[]结构体数组中添加如下内容:
#if defined(CONFIG_DM9000)
&s5pc100_device_dm9000,
#endif
//配置内核
$ make menuconfig
//网络配置:
[*] Networking support (NEW) --->
Networking options --->
<*> Packet socket
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: multicasting
[*] IP: kernel level autoconfiguration
[*] IP: BOOTP support
//网卡驱动配置
Device Drivers --->
[*] Network device support --->
[*] Ethernet (10 or 100Mbit) --->
<*> DM9000 support
//网络文件系统的配置
File systems --->
[*] Network File Systems --->
<*> NFS client suppor
[*] NFS client support for NFS version 3
[*] NFS client support for the NFSv3 ACL protocol extension
[*] Root file system on NFS
//编译内核,并拷贝到tftpboot目录下
$ make zImage
$ cp arch/arm/boot/zImage /tftpboot
//启动开发板,修改内核启动参数,通过NFS方式挂载根文件系统
/上面做完后,在下载到开发时候,可能在挂在nfs时会出现问题:具体问题,自己查阅网路资源(有可能是你的网络配置出现一点问题)
//-----下载kernel
$ tftp 0x20008000 zImage //从tftp服务器里下载内核zImage 到内存20008000地址中 ,tftp服务器的ip地址由serverip 变量确定
$ nand erase 100000 300000 //擦除nandflash中,从 100000 开始,长度为300000的内容
$ nand write 20008000 100000 300000 //把内存20008000 中的内容 写入nandflash的100000地址中,长度为300000
$ setenv bootcmd nand read 20008000 100000 300000 \; go 20008000
saveenv