1.启动开发板,此时uboot环境变量没有设置machid,那么machid一定会采用在uboot代码中的初始化:
果然,此时的machid = id of smdk2410 (当然,此时的整个系统完全能正常启动)
2.测试net功能
2.1smdk2410
显然smdk2410检测不到网卡驱动。
2.2smdk2440
还是没有网卡驱动。
2.3mini2440
测试1:能检测DM9000网卡,能设置ip
测试2:ping
不能ping www.baidu.com 因为没有运行DNS服务。
但是能ping 通宿主机。
测试三:nfs mount (前提是server必须安装nfs,并启动)
mount 失败!
3.给SMDK2440移植DM9000
3.1分析:
Linux-3.4.2中已经很好的支持DM9000,且有DM9000驱动文件,只是版本有点老。
在内核中DM9000采用的是platform平台驱动架构。platform驱动架构主要是分两部分:platform device和platform driver
其中platform device在arch/arm/mach-上c24xx/mach-smdk2440.c中:
首先要:确定板载资源:struct resource xxx-dm9000-resource{。。。。}
然后要:确定一些DM9000的私有数据(有没有EEPROM,位宽):struct
其次要:填充struct platform_device xxx_dm9000_device{...}
最后要:在struct platform_device *xxx_device={ &xxx_dm9000_device}
补充:Linux内核启动的时候执行start_kernel->setup_arch->...->xxx_device.....所有平台设备的资源注册是在内核启动的时候就完成了。
其中platform driver在drivers/net/ethernet/davicom/dm9000.c中:
驱动是完整且与该内核兼容,所以不用修改。
至于原理不再叙述。。。。
3.2移植
在arch/arm/mach-上c24xx/mach-smdk2440.c中:
添加板载资源:
先看mini2440:
修改:
第二步:修改私有数据:
先看mini2440:
修改:
最后添加:
添加:
OK!
4.编译uImage并测试
set machid 16a
在启动信息中:可以看出内核已经识别出DM9000了
测试:
能设置ip,也能ping 通。
但任然不能挂载:
不过不能挂载不是DM9000的问题。
所以,移植成功!
5.总结
需要注意的是:
a.理解platform驱动架构
b.知道板载资源的IO地址是怎么分配的
c.了解device 和 driver是怎么注册到内核的。