树莓派之编译内核驱动(1)-搭建交叉编译环境
转载请注明出处https://blog.csdn.net/li84006800/article/details/103958869
问题一:用git clone下载源码遇到的问题
其实构建树莓派的交叉编译环境和其他的linux-arm开发是一致的,这里比较让人头疼的主要是树莓派内核源码的获取和编译工具的获取。搜了很多博客,大神门都是采用git工具从github上获取linux下的源码、tool下的编译工具。
git clone git://github.com/raspberrypi/linux.git RpiLinux
git clone git://github.com/raspberrypi/tools.git RpiTools
然而,你会发现,需要安装git工具
sudo apt-get install git
以上解决方案都不可避免的遇到一个问题-从github下载code是非常非常之慢。
问题2-压缩格式的问题
既然从github直接git clone速度慢,有另外一种方式是利用码云创建仓库,将github上的code克隆岛码云上,这样下载速度会明显提升。
这时用windows下的git工具从码云git clone源码会发现下载的是解压后的源文件(linux下未验证),编译会报各种格式、语法方面的错误。
如果直接在码云上下载zip格式的压缩文件,在linux环境下解压后编译也会报各种错误。这里意识到应该下载tar.gz格式的源码。
经过以上两个问题的折磨之后搜索总结出一套交叉编译环境的方法
一、下载源码
1、查看树莓派上的系统版本
uname -a
得到的系统版本号为Linux raspberrypi 4.14.98+ 。因此下载的内核源码版本也应为4.14.98
2、github上查看可用的分支
a、打开https://github.com/raspberrypi/linux,默认当前分支为rpy-4.19.y。
b、查看该分支下Makefile文件,说明当前分支code的linux版本为4.19.93,不是我们想要的4.14.98。
c、更改分支,选择Branches-->4.14.y,发现其Makefile说明当前版本为4.14.114,也不是我们想要的4.14.98.这里是一个大坑,开始我以为4.14.y就是所有4.14版本开头都可以的源码,结果编译内核驱动之后无法加载到树莓派。
d、更改分支,选择Tags-->raspberrypi-kernel_1.20190401-1,发现其Makefile说明当前版本为4.14.98
【技巧】选择哪个日期的Tags分支,可以查看你从树莓派官网下载的raspberrypi系统的发行日期,一般Tags分支下日期最近的就是发行版的系统源码。
e、直接浏览器打开如下网址,自动弹出下载框,较慢,但下载的是tar.gz的压缩包
https://codeload.github.com/raspberrypi/linux/tar.gz/raspberrypi-kernel_1.20190401-1
其中raspberrypi-kernel_1.20190401-1改为你需要的分支,这种下载的好处是windows下也能下载tarz.gz压缩包,不用git工具,还可以用迅雷加速下载,虽然也慢,但格式保证正确、不用额外工具。
至此源码工作下载完成。
二、下载交叉编译工具
从https://github.com/raspberrypi/tools下载交叉编译工具会出现如下问题
1、arm-linux-gnueabihf-gcc -v,会报“error:no input files compilation terminated”错误
2、编译内核时也会报“error:no input files compilation terminated”错误
因此不用该网址的tool工具,选择从http://mirrors.ustc.edu.cn/kernel.org/tools/crosstool/files/bin/x86_64/4.9.4/ 下载,选择如下
至此,交叉编译工具下载完成。
三、编译环境搭建
1、安装VMware虚拟机,安装Ubuntu 14 64位
2、安装交叉编译工具
3、编译内核
4、编写编译用于测试的内核驱动模块
5、将生成的内核驱动模块复制到树莓派后加载测试
以上步骤可以参考https://blog.csdn.net/shanglin163/article/details/88828427,在此不详细赘述