一. 目的:
二. 硬件材料:

三. 开发准备:
为了防止接下来的内核编译开发,影响到某些软件更新不全导致功能失效,所以提前更新系统。
更新树莓派的内核方法如下:
apt-get upgrade 与apt-get dist-upgrade的区别:
upgrade只是简单的更新包,不管这些依赖,它不和添加包,或是删除包.
而dist-upgrade可以根据依赖关系的变化,添加包,删除包.
一般在运行upgrade或dist-upgrade之前,要运行update.
四. 树莓派交叉编译环境:
我这里采用的是在自己搭建的交叉编译环境,而不是直接在树莓派上直接编译。
原因如下:
我使用的虚拟机编译环境:
交叉编译系统: Linux kali 4.13.0-kali1-amd64 (2017-11-08) x86_64 GNU/Linux
交叉编译器: arm-linux-gnueabihf-gcc
交叉编译版本: gcc version 7.2.1 20171011 (Linaro GCC 7.2-2017.11)
Kali下载地址:
https://www.kali.org/downloads/
交叉工具链下载地址:
http://releases.linaro.org/components/toolchain/binaries/latest-5/arm-linux-gnueabihf/
添加工具链到系统目录:
vim /root/.bashrc
export PATH=$PATH:/home/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin/
source /root/.bashrc
输入arm-linux-gnueabihf-gcc -v 查看是否有正常的输出信息,显示GCC编译信息和版本信息
编译环境依赖:
sudo apt-get install git bc bison flex libssl-dev
五. BSP开发:
树莓派内核分支:
https://github.com/raspberrypi/linux
可以使用命令下载: git clone --depth=1 https://github.com/raspberrypi/linux
git clone xxx.git “指定目录”
树莓派官方内核编译说明:
https://www.raspberrypi.org/documentation/linux/kernel/building.md
树莓派内核修改
添加系统组件
cd kernel
make menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
device drivers--->usb support--->usb serial converter support
选中如下组件:
USB driver for GSM and CDMA modems
添加PPP协议支持
Device Drivers--→Network device support
选中后保存配置,重新编译内核即可
错误提示:
make menuconfig启动报错
原因:
出现该错误的原因是在使用menuconfig时,需要ncurses库的支持。
原来是最小系统不支持图形的原因,安装libncurses5-dev套件后即可。
解决办法:
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install libncurses5-dev libncursesw5-dev --fix-missingsudo
apt-get install bc 添加丢失的依赖
sudo apt-get install bison
总之缺什么库就安装什么东西, 保证编译没有问题。
添加驱动
找到内核源码文件c(一般情况下,路径在..\drivers\usb\serial\option.c)
在源码中查找 option_ids 表,请参照上面1 节中项目信息添加 龙尚产品的 VID 0x1c9e和 PID0x9b3c
添加完成后,跟系统一起编译,烧入目标设备.
说明:
在比较早的 linux 版本中,路径在..\drivers\usb\serial\usb-serial.c
编译完成应该包含下面的三个ko驱动文件
注意:树莓派是编译到内核中的,所以设备起来之后,就直接加载了三个驱动.
实际驱动加载情况如下,查看dmesg内核信息:
树莓派内核编译
编译前清理:
因为是首次编译,所以并没有要清除的文件,但原来编译过内核就最好还是清理一下
一般在源码编译的时候都使用make clean,但会保留内核的配置文件.

内核配置:
KERNEL=kernel7 (需要在树莓派机器上查看uname -a 看下arm版本)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
编译zImage,modules和dtbs
zImage算是最终内核镜像的半成品,modules是内核模块,
dtbs作用于/boot,个人觉得应该与树莓派加电启动有关,类似BIOS
Note:多处理系统可以添加选项-j n ,n为数字,表示多处理器的数量*1.5。加快编译速度
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 zImage modules dtbs
耗时40分钟到80分钟之间
如果遇到下面的编译错误:
说当前的内核配置disable了modules这个特性
所以你需要make config & enable loadable module support
然后在重新编译内核即可
内核打包:
INSTALL_MOD_PATH=/home/image modules_install
sudo make modules_install
sudo cp arch/arm/boot/dts/*.dtb /home/image/boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /home/image/boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /home/image/boot/overlays/
arch/arm/boot/zImage 编译的内核文件, zImage 是 Compressed kernel image 文件,
要转换为 kernel.img 还需要进一步处理。
Sudo scripts/mkknlimg arch/arm/boot/zImage /home/image/boot/$KERNEL.img
错误:
net/ipv4/netfilter/ipt_ecn.c:99: error: 'IPT_ECN_OP_MATCH_CWR' undeclared (first use in this function)
http://patchwork.ozlabs.org/patch/966874/
解决方法:在make menuconfig中精简network support
内核安装:
mount.cifs -o username="pi",password="raspberry",rw //192.168.0.110/share /home/nfs
通过把树莓派(开启samba)挂载编译系统, CIFS挂载的可以直接操作目录很方便
内核安装完成后,重启树莓派,
sudo reboot
内核验证:
执行命令: cat /proc/version
替换前:
替换后:
4G USB口验证:
使用自己写的串口小工具,也可以使用minicom开源工具:
https://alioth.debian.org/projects/minicom/
六. APP开发(ppp拨号):
应用层通过AT指令和4G模块通信,达到拨号和发送短信的功能
pppd开源库编译
编译后产生pppd和chat工具
使用自己写的mobile程序测试功能:
- 作者:admin | 发布:2018年02月03日
- 分类:raspberry
- 标签:network
- 转载文章请注明:树莓派跑4G模块 | 夜色温柔