需要工具:1.Linux内核源码包,可在http://www.kernel.org/pub/linux/kernel/中去下载自己需要的版本,我们这里我们使用的内核为 linux-3.0.8.tar。
2.需要挂载的芯片源码,这里使用三星的S5PV210为例,代码包为rootfs_fs210.tgz的一个压缩包
3.交叉工具链,toolchain-4.5.1-farsight.tar.bz2。
1.我们要移植配置Linux-3.0.8系统,这里我是直接在用户目录下使用Samba直接建立个共享文件夹的,在Windows中直接把想要需要的文件放在其中,然后在linux中操作文件。正如下图所示,将.bz2文件放在s5PV210文件下,并解压为一个linux-3.0.8的一个文件。解压:tar -xvf linux-3.0.8.tar.bz2,等待解压完成。
2.解压完成后我们进入到linux-3.0.8文件中,找到我们的Makefile文件,sudo vim makefile打开该文件,将我们要挂载的芯片进行填写ARCH ?= arm,CROSS_COMPILE ?= arm-none-linux-gnueabi-,修改完成后,保存退出即可。
3.为了实现我们能够挂载s5PV210芯片,我们需要对系统进行配置。执行语句 make s5pv210_defconfig 系统会默认给我们配置一些相应的设置。如下图所示即可。
4.对linux内核的裁剪,选择我们需要的功能,这样有利于我们进行驱动开发,也减少不必要的麻烦。
在Linux源码的根目录下,执行make menuconfig配置,界面如下图所示。
注意:1.如果提示缺少ncurse 实行sudo apt-get install libncurses5-dev命令进行安装即可。
2.如果终端必修能够容下这个面板,要不然也会报错。
接下来就是我们对linux系统进行裁剪了,先说明,按空格键进行选中,[*]表示选中,上下左右键进行上下左右操作。
General setup --->
[*] Configure standard kernel features (expert users) --->
System Type --->
(0) S3C UART to use for low-level messages //这里面将01改为00,表示使用串口1进行信息输出
Kernel Features --->
Memory split (3G/1G user/kernel split) ---> //选中常用的4G大小分配,3G的用户内存,1G的系统内存。
[*] Networking support --->
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 (NEW) --->
<*> NFS client support
[*] NFS client support for NFS version 3
[*] NFS client support for the NFSv3 ACL protocol extension
[*] Root file system on NFS
到此我们就将需要的linux剪辑完毕,退出保存即可。
5.移植网卡驱动
打开我们的文件 vi arch/arm/mach-s5pv210/mach-smdkv210.c
修改网卡的mac地址:
static struct dm9000_plat_data smdkv210_dm9000_platdata = {
.flags = DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM,
.dev_addr = { 0x00, 0x09, 0xc0, 0xff, 0xec, 0x99 }, // 设置为座位号码
};
修改结构体数组smdkv210_dm9000_resources为:
static struct resource smdkv210_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 | IORESOURCE_IRQ_HIGHLEVEL,
},
};
修改该函数
static void __init smdkv210_dm9000_init(void)
{
/*时序配置:需要技术支持*/
unsigned int tmp;
gpio_request(S5PV210_MP01(1), "nCS1");
s3c_gpio_cfgpin(S5PV210_MP01(1), S3C_GPIO_SFN(2));
gpio_free(S5PV210_MP01(1));
tmp = (5 << S5P_SROM_BCX__TACC__SHIFT);
__raw_writel(tmp, S5P_SROM_BC1);
tmp = __raw_readl(S5P_SROM_BW);
tmp &= (S5P_SROM_BW__CS_MASK << S5P_SROM_BW__NCS1__SHIFT);
tmp |= (1 << S5P_SROM_BW__NCS1__SHIFT);
__raw_writel(tmp, S5P_SROM_BW);
}
6.编译内核
进入linux内核的源码根目录,执行如下命令:make -j2 zImage
farsight@ubuntu:~/s5pv210/linux-3.0.8$ cp -raf arch/arm/boot/zImage /tftpboot/
等待内核编译完成即可。(该编译有点久)
编译完成后执行 cp -raf arch/arm/boot/zImage /tftpboot/ ,将zImage cp到tftpboot中。
7.接下来是对我们需要交叉编译的工具包进行配置,该文件我放在系统目录下的opt文件下如下:
经过解压之后,得到toolchain-4.5.1-farsight文件,在当前目录下执行sudo vi ~/.bashrc语句,对文件进行添加配置信息export PATH=/opt/toolchain-4.5.1-farsight/bin:$PATH ,添加完成后,保存退出即可。
8.从上我们也可知道,我也把需要挂载的文件也放在了/opt目录下,此时我们也对该文件进行解压 sudo tar -xvf rootfs_fs210.tgz ,解压得到rootfs文件。加压之后我们就对NFS进行配置。
配置NFS文件系统
/opt$ sudo vi /etc/exports //打开NFS配置文件
/opt/rootfs *(subtree_check,rw,no_root_squash,async) //将该信息添加到其中即可。
sudo exportfs -a //最后将其挂载