树莓派驱动开发(一)环境配置

操作系统:Ubuntu24.04

开发板:树莓派4b

一、编译内核

可以在树莓派上直接编译(大约2h),也可以在虚拟机中先编译好,再放到树莓派中(大约40min)。

1.安装交叉编译链

1.1

下载链接Linaro Releases中的gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz。

1.2

解压压缩包

tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar

1.3

将编译工具存到/usr/local/arm

sudo mkdir /usr/local/arm
sudo cp gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu /usr/local/arm

1.4

配置环境变量

sudo vi /etc/profile
 
export PATH=$PATH:/usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin

1.5

安装依赖

sudo apt-get install lsb-core lib32stdc++6

1.6

重启

sudo reboot

1.7

查看

aarch64-linux-gnu-gcc -v

注意

1.环境变量的export的gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu可以根据自己的想法改,文件名对应正确就好了

2.如果在树莓派上无法安装依赖,又只想在树莓派上编译,不需要交叉编译的话,可以直接在树莓派上下载gcc,效果是一样的。

sudo apt-get install gcc

2.编译内核+加载模块

接下来的步骤,在Ubuntu虚拟机里面和树莓派里面都是一样的

2.1

获取依赖

sudo apt-get install git bison flex libssl-dev zip libncurses-dev make

2.2

获取内核源码

git clone --depth=1 --branch rpi-5.15.y https://github.com/raspberrypi/linux
#如果报错,就多试几次就好了,网络就是这样的

2.3

按顺序执行,编译源码

cd linux
 
make distclean  #或者make mrproper
 
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KERNEL=kernel8 bcm2711_defconfig
 
make -j4 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KERNEL=kernel8
#开始编译,如果在树莓派上编译,则需要2个小时左右,如果是Ubuntu虚拟机,则在40分钟左右

2.4

编译完成后,更新模块

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/home/linux/ modules_install
 
#INSTALL_MOD_PATH=/home/linux/ 改成自己放linux源码的路径

至此,如果没有报错,则得到5.15.92-v8+内核。

3.配置内核模块

这里的步骤,树莓派和Ubuntu虚拟机是不一样的

树莓派

将所需的文件复制到/boot/firmware下面去

sudo cp linux/arch/arm64/boot/dts/broadcom/*.dtb /boot/firmware
sudo cp linux/arch/arm64/boot/dts/overlays/*.dtb* /boot/firmware/overlays/
sudo cp linux/arch/arm64/boot/dts/overlays/README /boot/firmware/overlays/
# 复制内核
sudo cp linux/arch/arm64/boot/Image /boot/firmware/kernel8.img
 
 
sudo cp -r linux /lib/
 
#linux/改成  linux源码的路径

Ubuntu虚拟机

虚拟机则需要插入树莓派的SD卡,并找到对应的设备名是哪个,我的是sdc1和sdc2

然后按操作

cd ~
mkdir data1
mkdir data2
sudo mount /dev/sdc1 ~/data1
sudo mount /dev/sdc2 ~/data2
sudo cp linux/arch/arm64/boot/dts/broadcom/*.dtb ~/data1
sudo cp linux/arch/arm64/boot/dts/overlays/*.dtb* ~/data1/overlays/
sudo cp linux/arch/arm64/boot/dts/overlays/README ~/data1/overlays/
# 复制内核
sudo cp linux/arch/arm64/boot/Image ~/data1/kernel8.img
 
sudo cp -r linux ~/data2/lib/
 
#linux改成  linux内核源码的路径
sudo umount ~/data1
 
sudo umount ~/data2

把SD卡插回树莓派。

接下来的步骤是树莓派和Ubuntu虚拟机共同的

修改配置文件

sudo vi /boot/firmware/config.txt
 
# 在末尾!!!添加内容并保存退出
 
arm_64bit=1
kernel=kernel8.img

然后重启树莓派,并查看

sudo reboot
uname -r

如果和编译后的内核是一个版本,均为5.15.92-v8+,则成功

注意

更换内核后,wifi模块会出问题,我看到的解决方法是重新加载内核模块

即从2.4开始重新弄,然后再在树莓派上输入命令 sudo depmod,再重启就好了,但是我的没成功。

所以我的方法是用网线连接

读者可以自行搜索网线连接的方法,如果发现eth0没有出现的话,需要在/etc/netplan里面进行设置

sudo vi /etc/netplan/50-cloud-init.yaml

#然后在network:下面加
    ethernets:
      eth0:
       addresses: [192.168.137.21/24],这是ip地址和子网掩码,DNS和网关有需要就配
       optional: true
    version: 2

再重启网络服务sudo netplan apply就可以了

谢谢观看!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值