查看: 1276|回复: 0

[原创] S5PV210(TQ210)学习笔记——内核移植与文件系统构建之二

[复制链接]
  • TA的每日心情
    奋斗
    2018-3-5 10:57
  • 签到天数: 112 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2016-1-8 11:41:19 | 显示全部楼层 |阅读模式
    分享到:
      由于之前做过2440和6410,鉴于时间原因,这里暂时跨过其他模块的裸机驱动和uboot移植,直接进入内核移植及驱动开发方面的学习。
      三 设置uboot启动参数
      我的nfs根目录为/nfsroot,我的根文件系统目录是在该目录之下的,即/nfsroot/rootfs目录,故uboot启动参数设置如下:
      noinitrd console=ttySAC0 root=<主机IP>:/nfsroot/rootfs rw ip=<开发板IP>:<主机IP>:<网关>:<子网掩码>::eth0ff init=/linuxrc
      需要注意的是,所有的冒号":"都不可省略。
      四 网卡驱动移植(DM9000)
      选择网卡移植是因为网卡驱动相对较为简单,对于DM9000就更加简单了,因为内核本身提供了DM9000的驱动程序,但是没有针对开发板进行管教配置,因此,我们配置下开发板相关的东西即可完成网卡驱动的移植。打开arch/arm/mach-s5pv210/mach-smdkv210.c文件,并作以下修改:
      (1) 修改smdkv210_dm9000_resources定义如下
      static struct resource smdkv210_dm9000_resources[] = {
      [0] = {
      .start = 0x88000000,
      .end = 0x88000000 + 3,
      .flags = IORESOURCE_MEM,
      },
      [1] = {
      .start = 0x88000000 + 4,
      .end = 0x88000000 + 4 + 3,
      .flags = IORESOURCE_MEM,
      },
      [2] = {
      .start = IRQ_EINT(10),
      .end = IRQ_EINT(10),
      .flags = IORESOURCE_IRQ|IORESOURCE_IRQ_HIGHLEVEL,
      }
      };
      (2) 修改smdkv210_dm9000_init函数如下
      static void __init smdkv210_dm9000_init(void)
      {
      unsigned long* srom_bw = ioremap(0xE8000000, 4);
      unsigned long* srom_bc1 = ioremap(0xE8000004, 4);
      *srom_bc1 = ((0<<28)|(0<<24)|(5<<16)|(0<<12)|(0<<8)|(0<<4)|(0<<0));
      *srom_bw &= ~(0xf << 4);
      *srom_bw |= (1<<4)|(1<<5);
      gpio_request(S5PV210_MP01(1), "nCS1");
      s3c_gpio_cfgpin(S5PV210_MP01(1), S3C_GPIO_SFN(2));
      gpio_free(S5PV210_MP01(1));
      iounmap(srom_bw);
      iounmap(srom_bc1);
      }
      这样,就完成了DM9000网卡驱动的移植,其实这样修改是有逻辑的,根据TQ210的原理图可知DM9000连接的片选时nCS1,也就是网卡是接在来ROM控制器的BANK1上。


      根据S5PV210的内存映射表可以看出,SROMC的BANK1地址空间为0x88000000~0x8FFFFFFF,故当CPU寻址该范围内的地址空间时才会使能片选nCS1。所以,我们采用的是0x88000000地址。


      另外,从TQ210原理图的DM9000部分还可以看到,DM9000使用的是外部中断10,故将中断号修改为10号。
      最后需要说明的是smdkv210_dm9000_init函数的修改,这是因为DM9000的数据访问、命令发送等是按照一定时序工作的,而DM9000接再SROMC上,因此需要配置SROMC时序,使其可以正确驱动DM9000,关于时序的详细配置我还没研究,不过韦东山老师的第二期视频中讲述了DM9000的驱动移植,也讲了时序配置,需要的话可以参考。
      五 挂接文件系统
      我们现在配置好了网卡驱动,还需要对内核稍作配置才能使内核支持网络文件系统挂载,具体的可以参考以下配置。
      (1) 配置网络支持
      
  • Networking support --->
      Networking options --->
      <*> Packet socket
      <*> Unix domain sockets
      
  • TCP/IP networking
      
  • IP: multicasting
      
  • IP: kernel level autoconfiguration
      
  • IP: DHCP support
      
  • IP: BOOTP support
      
  • IP: RARP support
      
  • IP: multicast routing
      (2) 配置网卡设备支持
      Device Drivers --->
      
  • Network device support --->
      
  • Ethernet driver support --->
      <*> DM9000 support
      (3) 配置网络文件系统支持
      File systems --->
      
  • Network File Systems --->
      <*> NFS client support
      <*> NFS client support for NFS version 2
      <*> NFS client support for NFS version 3
      
  • NFS client support for the NFSv3 ACL protocol extension
      <*> NFS client support for NFS version 4
      
  • Root file system on NFS
      配置完以上三项后保存配置,然后再次编译内核,直接执行make指令即可。
      这时,重新下载内核测试运行,没有意外的话现在内核已经可以正常工作了,如果不幸的遇到了问题,那么问题应该是NFS服务器配置的问题,ubuntu下配置NFS服务器很简单
      sudo apt-get install nfs-kernel-server
      然后以根权限打开/etc/exports文件,我的NFS根目录为/nfsroot,故,我设置export为
      /nfsroot/ *(rw,sync,no_root_squash)
      设置完成之后需要重启NFS服务,ubuntu下执行
      sudo service nfs-kernel-server restart
      重启的时候会看到一些警告,如下图


      但是上述警告不影响使用。反之,如果设置为no_subtree_check,虽然系统可以正常挂载,但是无法进行创建文件等写操作,也就是说,挂载的文件系统是只读的。最后还要修改下/nfsroot的权限,为了以后使用方便。
      chmod a+x /nfsroot -R
      到这里,基于TQ210的内核移植已经初步完成了,接下来我们就可以进行驱动开发了。
      六 问题总结
      我在配置过程中遇到了很多问题,现在稍作总结
      (1) 串口中断打印完Starting kernel...之后就没有任何输出了
      配置内核,指定调试信息输出端口为UART0,文中讲到了详细配置。
      (2) 解压完内核之后没有任何输出了
      a.检查bootargs环境变量设置是否正确,必须设置console=ttySAC0
      b.检查uboot传递的机器码根内核是否对应
      c.检查uboot传给内核的taglist是否正确
      (3) 内核无法挂接到NFS文件系统
      a. 正确移植DM9000网卡驱动
      b. 配置内核的网络部分、网卡设备和文件系统中的网络文件系统
      c. 确认NFS服务器的配置是否正确,用另外其他linux或已经移植好系统的linux进行测试(mount -o nolock xx.xx.xx.xx:/nfsroot/rootfs)。
      (4) 文件系统挂接成功,无法执行/linuxrc
      a. 检查NFS配置文件,最好以NFSv2方式配置,内核不支持的话会出现问题。
      b. 最好以文中推荐的方式进行NFS服务器配置。
      c. 配置完成之后需要重启NFS服务或者是重启系统。

  • 回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2025-1-12 08:04 , Processed in 0.118452 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.