需要工具: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 //最后将其挂载

 


 

 

 

 

 

 

 

 

 

posted on 2020-11-03 15:40  xiao_fei  阅读(790)  评论(0编辑  收藏  举报