前言
创龙官方提供的资料无锡沐创N500L-AM4驱动是rnpgbe-0.1.0.rc60-dd9f3cf.tar.gz;无锡沐创官方,截止目前,最新驱动是rnpgbe-0.2.3-f26b9a4.tar.gz。考虑到开发的稳妥性,先选用创龙尝试过的rnpgbe-0.1.0.rc60-dd9f3cf.tar.gz来移植,将他解压出来,后文将其简称“官方包”。
目标环境:TL3562 Ubuntu环境(不是buildroot)kernel 5.15
根据创龙官方提供的资料,来移植,会有些问题,创龙自己测试是编译成模块再移植到系统里来测试的,没有移植到内核源码中。为排查问题,花费了1.5天的时间,凸(艹皿艹 )。
移植过程及遇到的问题
根据rnpgbe-0.1.0.rc60-dd9f3cf.tar.gz中的README文件中所述:
- 先将官方包里的scr文件夹中文件,复制到内核源码中。但是kernel/drivers/net/ethernet下没有mucse文件夹,需要手动创建,然后进入musce文件夹,再创建一个rnpgbe文件夹。再开始复制:把官方包里的scr/目录下所有文件复制到kernel/drivers/net/ethernet/musce/rnpgbe/目录下。
- 然后把官方包里kconfig_file文件夹中的Kconfig、Makefile两个文件,复制到kernel/drivers/net/ethernet/musce/目录下。
- 将kernel/drivers/net/ethernet/musce/rnpgbe/目录下的Makefile文件删除,将makefile.example文件重命名为Makefile。
- 修改kernel/drivers/net/ethernet/下的Makefile,让编译的时候,去编译kernel/drivers/net/ethernet/musce下的内容:增加一句obj-$(CONFIG_NET_VENDOR_MUCSE) += mucse/,如图:
- 修改kernel/drivers/net/ethernet/下的Kconfig,让menuconfig工具,去包含kernel/drivers/net/ethernet/musce下的Kconfig文件:增加一句source "drivers/net/ethernet/musce/Kconfig",如图:
- 去menuconfig界面中配置上mucse驱动:make menuconfig --> Device Drivers --> Network device support --> Ethernet driver support,应该默认就是开启的,save一下退出menuconfig
- 然后开始编译内核的流程,很顺利,但是去kernel/drivers/net/ethernet/musce/rnpgbe/目录下,查看生成的build-in.a居然只有8kb,有问题!把该镜像烧到开发版上,然后dmseg | grep rnp指令,也确实找不到该驱动的启动信息!
- 经对比Kconfig文件,发现端倪!mucse/Kconfig和mucse/rnpgbe/Makefile中的命名不一致!稍作修改如下:
- 再次编译内核源码,编译过程中就会报错了:
- 通过上述内容,可以发现是有两个问题:①No rule to make target 'xxxxxxx/rnp_ptp.o'; ②error: unused variable 'hw_addr_bar0',就说这个变量没有被使用
- 前往rnpgbe_main.c,去解决②,文件中搜索一下发现有两个地方有hw_addr_bar0,直接把这两处注释掉
- 再次编译内核源码,发现只剩一个问题了,刚才修改有效
- 这个问题,思索了许久。对比过原包内的Makefile和makefile.example发现有问题!
- 对比如下:
- 凸(艹皿艹 )官方发布的文件,文件名写错了,还漏了一个文件!因此,结合上述内容,该makefile实际上有三处问题:
- 再次编译内核源码,就顺利通过了。把镜像烧入开发板,使用dmseg | grep rnp指令查看,可以发现有驱动信息,成功了。
后续问题
查看了无锡沐创最新版本的驱动包rnpgbe-0.2.3-f26b9a4.tar.gz,里面的makefile.example还是有问题~笔者已通过邮件反馈,希望后期他们有维护。