RK3399上编译riffa驱动

      最近买了友善的rk3399开发板NanoPC-T4,主要是看中它的pcie,想作为主机来开发FPGA的pcie接口,因此走了上了折腾的道路。

     友善提供的系统还是很多的,有安卓7.0、lubuntu、ubuntu core,以及三方支持的DietPi。开始安装的lubuntu,预装了很多常用的软件,wifi工具、浏览器等都有,装上基本就能满足使用需求,这里折腾的是locale和timezone,系统没有安装locale库,导致apt-get upgrade不成功,折腾了很久才折腾出来。主要是安装language-pack-en-base,然后在/etc/default/locale中添加:

      LANG="en_US.UTF-8"
      LANGUAGE="en_US:en"

      随后发现lubuntu虽然内核是64位的,但文件系统是32位,包括gcc,导致在编译riffa驱动是自动使用的aarch64-linux-gcc的编译选项而报错,当然这之前还出现了未安装内核头文件的问题,只是我投机取巧用apt-get install了近似的头文件(当时为验证能否编译riffa驱动而没考虑兼容性)。在qq群咨询有何方法安装64位gcc,得到安装ubuntu core系统的答复后(到现在我还想知道有没有不用换系统的方法,有知道的网友麻烦告知~),只有下载安装了ubuntu core(这里要吐槽一下某度网盘,把普通老百姓的下载速度限制到极低的程度)。

      安装ubuntu core后更是折腾,因为没有desktop,所有操作必须使用命令,对于我这种新手真是有点勉为其难。按友善的wiki(这里赞一下友善,wiki做的还不错),ubuntu core使用networkermananger来管理网络,按教程一通命令后,却发现怎么也设置不上,wifi无法连接,提示failed: ,于是在qq群里询问,这里要特别感谢群里的一位热心网友,半夜12点了还不耐其烦的教我这个菜鸟解决问题,可是毕竟是qq文字指导,折腾一番后还是没解决,网友还说第二天远程帮忙解决,感动ing。巧的是,第二天另一个群友竟然也遇到相同问题,这里不得不吐槽一下友善了,都出现两次相同问题了,官方竟然没有人出来提供一下解决方案~考虑到周末,不好意思麻烦网友,确定自己折腾。第一想到的是看用网口能否上网,一阵倒腾后(路由器在角落,没法接显示器),发现路由器分配ip了,但就是ping不同开发板,试着静态ip,还是不行,折腾到想放弃的时候,突然灵机一动,想看看直接通过网线连笔记本看看,于是分配ip到同一网段,连上竟然ping通了!于是找回了点信心,一阵度娘和wiki后,心想会不会networkmanager和wpa_supplicant冲突呢,于是按友善wiki教程,卸载了neworkmanager,重启后竟然连上wifi了!激动啊,虽然不知道是不是就是冲突了,但能连上路由器,能上网对于我来说就够了,其他先不管了(有知道原因的也麻烦告知~)

      接下来就是填之前偷懒省下来的坑了——linux-headers。查看一堆度娘来的资料后,觉得还是得要下载内核源码自己安装。按wiki下载了内核源码,这里又要吐槽一下github的下载速度了,用git下载了n次,都是中途就终止了,最后没法只有用手机下载了zip包,然后传到开发板上(当然是在开发板上安装samba服务器,然后手机通过ES文件浏览器将zip包导到开发板)。这里又偷懒了一次,安装https://wenku.baidu.com/view/66e2c77c67ec102de3bd890d文档make menuconfig后直接make headers_install后把相关文件夹拷贝到/usr/include中,然后将/lib/modules/xx.xx.xx/build链接到/usr/include中。无数的实践证明,偷懒都是没有什么好结果的,这次显然也不例外,在driver中make时无悬念的报错了(找不到autoconf.h)~还是回到老老实实编译一遍内核上来吧,安照wiki和https://www.cnblogs.com/Older-Driver-of-Newer/p/7077150.html将内核编译到~/build/kernel中(当然在make menuconfig时把crosstool清空了),令我有点惊讶的是T4竟然只用20分钟就完成编译了(不知道是不是真快,反正我觉得挺快了)。然后查看generaed中有autoconf.h的文件了,然后把文件拷贝到/usr/include中,这次不敢偷懒,按build的推测,把~/build/kernel中的文件都拷贝到/usr/src/xx.xx.xx中(这个文件夹真大啊,近4G,太占空间了,有知道正确方法的网友请告知,先谢过~),然后将/lib/modules/xx.xx.xx/build和source链接到这个文件夹。然后再次make riffa driver,这里修改了一处报错,一个根据内核版本宏编译的错误,根据字面理解将#elsif xxx及相应的内容注释,编译就通过了。然后make install,可是竟然出现fstatat(3,build_orgin): No such file.....的错误,这个错误却是因为不偷懒造成的。我将modules中原来的build备份到build_orgin中了,其本来链接到了一个不存在的路径中~~~删除后instal就成功了,激动ing。到处驱动基本告一段落,但折腾之路还很漫长……待续未完……





你可能感兴趣的:(RK3399上编译riffa驱动)