树莓派驱动开发--搭建环境篇(保姆级)

前言:树莓派的环境搭建关系到之后的驱动开发,故一个好的环境能让你顺手完成驱动开发!我使用的是64位树莓派4b!有显示屏的前提!!!(因为wifi连接太刁钻了)

一、ubantu相关

        1.1、虚拟机环境搭建

下载虚拟机vm,然后建立一个虚拟机,我这边用的ubantu版本是16.04,正点原子的,很稳定这个版本,推荐!

链接:https://pan.baidu.com/s/1r6NEANYDDbs7bg_lmPMeXA?pwd=hsw1 
提取码:hsw1

        1.2、 ssh、nfs、ftp搭建

使用命令搭建ssh

sudo apt-get install openssh-server

按步骤使用命令搭建nfs       

sudo apt-get install nfs-kernel-server rpcbindsudo vi /etc/exports#打开/etc/exports 以后在后面添加如下所示内容:
#/home/zuozhongkai/linux/nfs *(rw,sync,no_root_squash)  
#/home/zuozhongkai/linux/nfs 改成你想挂载的目录路径sudo /etc/init.d/nfs-kernel-server restart

ftp使能ubantu使用文件传输软件,快捷传输文件

这个软件自行安装

按步骤使用命令搭建ftp

sudo apt-get install vsftpdsudo vi /etc/vsftpd.con#打开 vsftpd.conf 文件以后找到如下两行:
#local_enable=YES
#write_enable=YES
#确保上面两行前面没有“#”,有的话就取消掉sudo /etc/init.d/vsftpd restart

        1.3、交叉编译链的搭建

交叉编译下载:链接

下载上面链接中的 gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz

使用文件传输软件传到ubantu

然后使用命令解压

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

使用命令创建一个目录专门存放编译工具

sudo mkdir /usr/local/arm

将解压好的工具改名且cp到该目录下,然后修改环境变量

sudo vi /etc/profileexport PATH=$PATH:/usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
#这个export的gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu要根据你的来改

修改好以后就保存退出,重启 Ubuntu 系统,交叉编译工具链(编译器)就安装成功了。

使用前安装依赖

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

验证

aarch64-linux-gnu-gcc -v

        1.4、内核编译+内核模块编译加载

为什么要编译内核,因为驱动基于内核源码,我们要根据树莓派开发板厂家提供的内核源码对Linux源码进行修剪配置,来适应我们的板子,说白了就是,根据树莓派厂家的描述文件bcm2711_defconfig生成一个适应该板子的配置文件.config,供顶层Makefile使用,Makefile根据这个配置来修剪得到一个适应我们使用的板子的内核,只有使用这个内核,才能正确让树莓派驱动运行,那为什么要加载内核模块,板子使用新编译出来的内核时,板子上原来的其他驱动也要更换为新编译出来的,才能适应我们的板子。所以在编译我们自己的第 1 个驱动程序之前,要先编译内核、模块,并且放到板子上去。

参考:韦东山

使用命令安装编译环境所需的依赖

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

获取内核源码,建议使用这个

mkdir pi_kernel     #创建一个目录存放内核源码git clone --depth=1 --branch rpi-5.15.y https://github.com/raspberrypi/linux
#如果报错,就多试几次就好了,网络就是这样的

按顺序执行

#获取后得到一个源码目录,改名为linuxcd linuxmake distclean  #或者make mrpropermake ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KERNEL=kernel8 bcm2711_defconfigmake -j3 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- KERNEL=kernel8
#开始编译

其中,KERNEL=kernel8参考:

编译大概持续40分钟。

编译完成后,在内核源码目录下执行命令加载更新内核模块

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

 

 得到5.15.92-v8+这个内核模块版本!

这步完成后,我们就得到了3个要更新到树莓派上的东西

(1)Image;内核                位于内核目录/arch/arm64/boot/

(2)dtb;设备树                 位于内核目录/arch/arm64/boot/dts/broadcom/

(3)内核模块;                  位于INSTALL_MOD_PATH/lib/modules/ 

至此我们就告一段落!

二、树莓派相关

        2.1、镜像烧写

链接:https://pan.baidu.com/s/1La93Og_kUzVTPRlsVPEiAQ?pwd=hsw1 
提取码:hsw1

建议使用这个镜像,因为能无显示屏连接wifi

连接WiFi只需2文件和一个读卡器

链接:https://pan.baidu.com/s/1oreylGMvZHX1DwRdy7wD-A?pwd=hsw1 
提取码:hsw1

其中wpa_supplicant.conf里面的内容

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1network={ssid="hsw"        #换成你的WiFi名称psk="12345678"    #换成你的WiFi密码
}

ssh是使能树莓派的ssh服务

烧好后就插卡上电,电脑开热点,得到ip后使用软件

ssh登录连接   账户:pi      密码:raspberry

        2.2、树莓派环境搭建 nfs

我们需要挂载文件来加速我们的开发,使用需要打通开发板与u版图的nfs通信;

按顺序使用命令

sudo apt-get install nfs-kernel-server rpcbindsudo vi /etc/exports#打开/etc/exports 以后在后面添加如下所示内容:
/mnt *(rw,sync,no_root_squash)sudo /etc/init.d/nfs-kernel-server restart

过程如报错

问题根源:源在国外,解决方法:更换源

按顺序执行

sudo nano  /etc/apt/sources.list #将初始化中的代码中默认的官方软件源注释掉# 
#添加下面的软件源   deb http://mirrors.aliyun.com/raspbian/raspbian/ buster main contrib non-free rpideb-src http://mirrors.aliyun.com/raspbian/raspbian/ buster main contrib non-free rpi

然后,

sudo apt-get update

再去执行我们的命令,就成功了

最后,成功了后,就能挂载了。

挂载测试

mount -t nfs -o nolock,vers=3 192.168.16.128:/home/hsw/linux_tools/nfs /mnt
#192.168.16.128是我u版图的wifi    ip地址  换成你的

 

 使用命令进入su,密码我们要换一个

sudo passwd root

在执行

su

进入root,然后再执行挂载命令,会显示卡住,别急,回到u版图执行命令

sudo sudo mount -t nfs 192.168.137.50:/mnt /home/hsw/linux_tools/nfs -o nolock 
#192.168.137.50是我的开发板树莓派的ip 换成你的
#/home/hsw/linux_tools/nfs是我的ubantu挂载目录路径 换成你的

 此时,已经挂载成功,可以在ubantu挂载路径下mkdir一个目录,然后回到开发板会发现出现mkdir的目录。

        2.3、更新内核及内核模块

在做这步之前我们先用命令查看一下树莓派出厂的内核版本

uname -runame -a

这个是有依据的

pi4加载默认是这个5.10.63-v7l+,且是armv7l模式。

接下来,我们用读卡器吧树莓派sd卡插回电脑。

先在虚拟机~目录下创建2个空文件

cd ~
mkdir data1
mkdir data2

然后挂载,

sudo mount /dev/sdb1 ~/data1
sudo mount /dev/sdb2 ~/data2

复制boot所需文件,安装内核模块

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#以上路径改成自己的内核下的xxxsudo cp -r lib/modules/ ~/data2/lib/#lib/modules/改成  INSTALL_MOD_PATH的值,这个是内核模块加载时的路径

卸载sd卡

sudo umount ~/data1sudo umount ~/data2

插回树莓派。

打开终端,编写config.txt

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

重启树莓派,reboot

打开终端,再输入

uname -runame -a

就变成我们编译的内核版本了。

三、常见错误

        3.1、加载内核模块

 这个错误就是因为没有更新板子上的内核

那你如果按照我的步骤一步一步来,就不会这样!

而是会成功加载进来,如下:

        3.2、 执行app时,架构冲突

在树莓派执行./app 文件时报错:没有那个文件或者目录。

那就到/bin下面file一下bash,如图,是32位的,

在file一下app文件,如图,是64位的。

64位兼容32位,而32位不行,

所以我们的交叉编译工具要变成32位的。

四、总结

        到此,我们就把驱动环境都搭建好了,下篇我们将讲驱动开发的实际操作了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/308102.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

目标检测笔记

目标检测笔记 one-stage和two-stage目标检测算法Two-Stage 目标检测算法One-Stage 目标检测算法既然Faster R-CNN使得候选区域生成和目标检测可以在同一个网络中端到端训练,为什么它还是属于Two-stage算法? 目标检测模型,训练中的正负样本是什…

使用Pandas实现股票交易数据可视化

一、折线图:展现股价走势 1.1、简单版-股价走势图 # 简洁版import pandas as pdimport matplotlib.pyplot as plt# 读取CSV文件df pd.read_csv(../数据集/格力电器.csv)data df[[high, close]].plot()plt.show() 首先通过df[[high,close]]从df中获取最高价和收盘…

UML学习

UML(Unified Modeling Language):统一建模语言,提供了一套符号和规则来帮助分析师和设计师表达系统的架构、行为和交互 类图:描绘类、接口之间的关系(继承、实现、关联、依赖等)以及类的内部结构(属性和方法),直观展现系统的静态…

uniapp开发小程序手写板、签名、签字

可以使用这个插件进行操作 手写板-签名签字-lime-signature - DCloud 插件市场 但是目前这个插件没有vue3 setup Composition API的写法。所以对于此文档提供的可以直接使用,需要使用Composition API方式实现的,可以继续看。 因为Composition API方式,更加的简单、灵活,…

Java 基于微信小程序的校园失物招领小程序,附源码

博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

elasticsearch7安全配置--最低安全等级,用户名密码

上一篇博客在centos7上安装了elasticsearch7 接下来对elasticsearch进行安全方面的配置 minimal security 最低安全等级,用户名密码 首先开启xpack vim config/elasticsearch.yml xpack.security.enabled: true由于我是单机配置的,还加了如下配置 d…

c语言->贪吃蛇实战技巧结合EasyX简单实现页面管理(简单实现)

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 1. 游戏背景 贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅…

WebLogic-XMLDecoder(CVE-2017-10271)反序列化漏洞分析及复现

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

机器学习——自动驾驶

本章我们主要学习以下内容: 阅读自动驾驶论文采集数据根据论文搭建自动驾驶神经网络训练模型在仿真环境中进行自动驾驶 论文介绍 本文参考自2016年英伟达发表的论文《End to End Learning for Self-Driving Cars》 📎end2end.pdf

【opencv】示例-npr_demo.cpp 非真实感渲染:边缘保留平滑、细节增强、铅笔素描/彩色铅笔绘图和风格化处理...

Edge Preserve Smoothing- Using Normalized convolution Filter Edge Preserve Smoothing-Using Recursive Filter Detail Enhancement Pencil sketch/Color Pencil Drawing Stylization /* * npr_demo.cpp * * 作者: * Siddharth Kherada <siddharthkherada27[at]gmail[do…

基于Python的深度学习的中文情感分析系统(V2.0),附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

海洋信息管理系统:守护蓝色星球,促进海洋经济新发展

海洋&#xff0c;覆盖地球表面超过七成的广阔水域&#xff0c;是生命之源&#xff0c;也是经济发展的重要空间。然而&#xff0c;随着人类活动的增加&#xff0c;海洋生态环境面临严峻挑战&#xff0c;海洋资源的可持续利用成为全球关注的焦点。在这样的背景下&#xff0c;构建…

Mac 下 Python+Selenium 自动上传西瓜视频

背景 研究下 PythonSelenium 自动化测试框架&#xff0c;简单实现 Mac 下自动化批量上传视频西瓜视频并发布&#xff0c;分享给需要的同学&#xff08;未做过多的异常处理&#xff09;。 脚本实现 首先通过手工手机号登录&#xff0c;保存西瓜视频网站的 cookie 文件 之后加载…

【心路历程】初次参加蓝桥杯实况

送给大家一句话&#xff1a; 寂静的光辉平铺的一刻&#xff0c;地上的每一个坎坷都被映照得灿烂。 – 史铁生 《我与地坛》 初次参加蓝桥杯有感 一点小小的震撼难评的做题过程A题 艺术与篮球问题描述解题 B 题 五子棋问题描述解题 C题 训练士兵问题描述解题 D题 团建解题 E题 …

聊一聊一些关于npm、pnpm、yarn的事

前言 整理了最近的闲聊&#xff0c;话题是前端各个包管理器&#xff0c;如果分享的不对或者有异议的地方&#xff0c;麻烦请及时告诉我~ 耐心看完&#xff0c;也许你会有所收获~ 概述 本文阅读时间&#xff1a;10-15分钟左右&#xff1b; 难度&#xff1a;初级&#xff0c…

人工智能|机器学习——基于机器学习的信用卡办卡意愿模型预测项目

一、背景介绍 在金融领域&#xff0c;了解客户的信用卡办卡意愿对于银行和金融机构至关重要。借助机器学习技术&#xff0c;我们可以根据客户的历史数据和行为模式预测其是否有办理信用卡的倾向。本项目通过Python中的机器学习库&#xff0c;构建了两个常用的分类模型&#xff…

13 Php学习:面向对象

PHP 面向对象 面向对象&#xff08;Object-Oriented&#xff0c;简称 OO&#xff09;是一种编程思想和方法&#xff0c;它将程序中的数据和操作数据的方法封装在一起&#xff0c;形成"对象"&#xff0c;并通过对象之间的交互和消息传递来完成程序的功能。面向对象编…

【DL水记】循环神经网络RNN的前世今生,Transformer的崛起,Mamba模型

文章目录 RNN网络简介传统RNN网络结构RNN的分类 长-短期记忆网络 (LSTM)GRU网络横空出世的Transformer网络Self-AttentionVisionTransformer Mamba模型Reference: RNN网络简介 “当人类接触新事物时&#xff0c;他们不会从头开始思考。就像你在阅读这篇文章时&#xff0c;你会根…

Day19-【Java SE进阶】网络编程

一、网络编程 1.概述 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。java.net,*包下提供了网络编程的解决方案! 基本的通信架构 基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)。 网络通信的…

测试开发场景问题,购物车测试场景

功能测试&#xff1a; a. 验证能否成功将商品添加到购物车。 b. 验证能否成功从购物车中移除商品。 c. 更新购物车中商品数量&#xff1a; d. 测试目标&#xff1a;验证能否成功更新购物车中商品的数量。 e. 验证能否成功清空购物车中的所有商品。 f. 验证能否成功结算购物车中…