移植网卡驱动DM9000
移植DM9000
移植
编译
-
解决错误
2.1 头文件不对 :去掉或改名
2.2 宏不对 :改名使用新宏
2.3 有些函数没有了 :改名使用新函数
移植前的试验
—之前移植的3.4.2内核是否已经具有支持smdk2440单板的网卡(否)
—之前移植的3.4.2内核是否已经具有支持mini2440单板的网卡(是),并可以成功挂接(mount -t nfs -o nolock,vers=2 192.168.0.3:/work/nfs_root/fs_mini_mdev_new /mnt)
移植内核自带的网卡驱动Dm9000.c(版本较低)
-
进入3.4.2内核自带网卡驱动文件Dm9000.c,找到平台驱动的结构体dm9000_driver,在源码中搜索”dm9000”,搜索结果确实找到了关于mini2440的设备文件,而没有smdk2440的。
-
进入上面搜索到的mach-mini2440.c文件,可知内核确实具有支持mini2440的对应的网卡平台设备
-
在源码中smdk2440的单板文件(mach-smdk2440.c)中,添加对应的网卡平台设备
—查看现在所有的平台设备,并没有网卡驱动对应的平台设备
—仿照mach-mini2440.c文件中的相关代码,在mach-smdk2440.c添加对应的网卡平台设备
-
上传文件,重新编译内核(make uImage)并命名为uImage_3.4.2_net,重启开发板后设置machid为16a(smdk2440),nfs下载新内核并重启,并重新验证内核是否已支持smdk2440的网卡设备(是)
set machid 16a
nfs 32000000 192.168.0.3:/work/nfs_root/uImage_3.4.2_net
bootm 32000000
移植厂家的网卡驱动(较新)
-
在work目录下创建目录,在该目录下拷贝二期驱动中修改好的厂家给的网卡驱动文件(drivers_and_tests\17th_dm9000c),修改其Makefile后,在该文件夹下编译。
—创建新目录,并拷贝文件
—修改Makefile
—编译,出现一大堆错误 -
解决错误
—错误中提示dev结构体中没有priv成员(dm9dev9000c.c),故在dm9000.c中查看(搜索”board_info”),发现该文件使用的是netdev_priv。故将dm9dev9000c.c中的(board_info_t *)dev->priv均替换成netdev_priv(dev)
—上传文件,重新编译,仍存在一大堆错误
—错误提示dm9dev9000c.c:428:struct net_device’ has no member named ‘open’等等,找到所在行,在dm9000.c中搜索”open”,参照其做法,在dm9dev9000c.c文件中仿照
—上传文件,重新编译,仍存在一堆错误
—错误提示dm9000_hash_table(哈希表)有问题,我们用dm9000.c中的哈希表的函数替换它
—上传文件,重新编译,仍存在一些错误
—错误提示是一些宏没有定义,查看头文件,需要包含dm9000.h
—上传文件,并将头文件dm9000.h(drivers\net\ethernet\davicom
)复制到/work/drivers_and_test_new/Dm9000c文件夹下,重新编译,存在少量错误提示—根据错误提示,进行最后修改
—上传文件,重新编译,编译成功
-
将已可以编译过的驱动文件dm9dev9000c.c放入对应的内核目录(dm9000.c的目录)并修改其Makefile,重新编译内核,用新内核启动,验证网卡是否可以正常工作
3.1 拷贝文件到内核目录
cp dm9dev9000c.c /work/system/linux-3.4.2/drivers/net/ethernet/davicom/
3.2 修改Makefile
vi /work/system/linux-3.4.2/drivers/net/ethernet/davicom/Makefile
3.3 重新编译内核,并命名为uImage_3.4.2_net_new
cp arch/arm/boot/uImage /work/nfs_root/uImage_3.4.2_net_new
3.4 nfs下载新内核并用其启动,验证网卡是否正常(是)
nfs 30000000 192.168.0.3:/work/nfs_root/uImage_3.4.2_net_new
bootm 30000000
-
但在直接挂接nfs网络文件系统是出现故障
4.1 设置环境参数并保存,直接挂接nfs网络文件系统;
set bootargs console=ttySAC,115200 root=/dev/nfs nfsroot=192.168.0.3:/work/nfs_root/fs_mini_mdev_new ip=192.168.0.4:192.168.0.3:192.168.0.1:255.255.255.0::eth0:off
save
4.2 nfs下载新内核uImage_3.4.2_net_new后,启动后出现如图故障
nfs 30000000 192.168.0.3:/work/nfs_root/uImage_3.4.2_net_new
bootm 30000000
-
查看驱动文件dm9dev9000c.c后,在dm9000c_init函数中使用与mini2440相同的时间参数后,重新编译内核(依旧命名为uImage_3.4.2_net_new),nfs下载后并启动,成功启动nfs网络文件系统(并未出现上步故障),最后将该内核烧写到nand的内核分区。
—修改
—新内核启动
—将新内核烧写到nand分区