欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

树莓派基础操作-经验总结

程序员文章站 2022-03-11 20:37:59
文章目录概念树莓派---基于ARM的微型电脑主板树莓派4B基础硬件参数---4核 A-72/4G DDR4基础环境搭建与使用1、树莓派基本环境搭建流程---SSH登陆命令行界面外壳及配件组装SD卡烧写镜像上电使用配置WIFI网络释放外设,远程连接使用2、命令行界面基础操作(简)---linux命令行使用3、虚拟机arm交叉编译链环境搭建下载源码---git:https://github.com/raspberrypi源码编译镜像升级测试4、python环境搭建linux基本环境及工具调试用户态小程序demo...


个人购买了一块树莓派4B,目的是搭建一个linux&&python环境,用于在家做一些调试学习;
由于需要做驱动开发调试,需要搭建一个交叉编译链环境,这里我选择下载对应内核版本源码包进行编译,方便调试;
整体环境:PC(win10:SSH访问树莓派)+虚拟机(Ubuntu+arm交叉编译链)+ 树莓派(ARM/Linux)
本内容对于linux/shell等操作基础使用不做描述;

概念

树莓派—基于ARM的微型电脑主板

树莓派由注册于英国的慈善组织Raspberry Pi 基金会开发,它是一款基于ARM的微型电脑主板,以SD/MicroSD卡为内存硬盘,卡片主板周围有1/2/4个USB接口和一个10/100 以太网接口(A型没有网口),可连接键盘、鼠标和网线,同时拥有视频模拟信号的电视输出接口和HDMI高清视频输出接口,以上部件全部整合在一张仅比信用卡稍大的主板上,具备所有PC的基本功能只需接通电视机和键盘,就能执行如电子表格、文字处理、玩游戏、播放高清视频等诸多功能。

树莓派4B基础硬件参数—4核 A-72/4G DDR4

树莓派基础操作-经验总结

SOC:Broadcom BCM2711(CPU:主频1.5 GHz,四核,Cortex A-72,64bit);
GPU:Broadcom VideoCore VI@500MHz;
内存:4G LPDDR4(我购买的4G版本)
外设:蓝牙5.0;USB2.02/USB3.02;micro HDMI*2(4K60hz+1080p60);802.11AC无限;2.4GHz/5GHz双频Wifi;千兆网口;
供电:5V3A

基础环境搭建与使用

1、树莓派基本环境搭建流程—SSH命令行操作/samba传输

外壳及配件组装

到手后第一步,先组装外壳/散热风扇/散热片;

SD卡烧写镜像

树莓派没有板载FLASH但支持SD卡启动,需要下载相应镜像烧写到SD。
管网地址http://www.raspberrypi.org/downloads,这里我没有烧写官网镜像,选择是购买店家提供的镜像(安装vim、gcc、打开SSH和WIFI设置、打开VNC远程桌面服务);烧写工具使用的是Win32 Disk Imager;

上电使用配置WIFI网络

插上SD卡后,上电使用,这里我先使用的hdmi显示器,配合一个鼠标 键盘,配置完成WIFI链接。

释放外设,远程连接使用

在完成上电网络连接后,可以释放显示器,鼠标,键盘。我通过SSH远程连接树莓派进行操作(烧写镜像已经打开了相关支持,蓝莓派的动态IP我是直接查看路由器IP分配得到),个人SSH工具用的MobaXterm;
树莓派基础操作-经验总结

开启samba服务(用于文件传输)

下载:sudo apt-get install samba;
配置:sudo vim /etc/samba/smb.conf 添加

[share]
   comment = share
   path = /home/pi/
   read only = no
   create mask = 0777
   directory mask = 0777
   valid users = pi
   public = yes
   browseable = yes
   writable = yes

添加samba用户并激活:sudo smbpasswd -a pi;sudo smbpasswd -e pi;
重启samba服务:sudo service smbd restart
外部访问:在win上 运行:\192.168.0.105,可以看到
树莓派基础操作-经验总结

2、命令行界面基础操作(简)—linux命令行使用

树莓派基于linux,针对操作学习直接学习以下linux的shell命令行使用即可
可以参考:https://blog.csdn.net/runafterhit/article/details/106594422

3、虚拟机arm交叉编译链环境搭建

下载源码(对应linux版本和编译工具)—git:https://github.com/raspberrypi

直接到官网下载,需要下载的内容:1、linux:内核源码;2、tools:编译内核和其他源码所需的工具交叉编译器等
(其他常用如firmware:树莓派的交叉编译好的二进制内核、模块、库、bootloader)
如果用git命令下载方式举例:git clone --depth=1 --branch https://github.com/raspberrypi/linux

相对git下载太慢了,而且不支持断点,我选择直接下载ZIP然后在linux上使用7za解压(默认unzip存在文件名称过长解压失败的bug),下载工具使用的Uget,注意选择对应的内核版本,可以通过uname -a查看你的树莓派。

pi@raspberrypi:/$ uname -a
Linux raspberrypi 4.19.50-v7l+ #895 SMP Thu Jun 20 16:03:42 BST 2019 armv7l GNU/Linux

树莓派基础操作-经验总结
解压完成后,要把选择编译器 并放到默认路径中去,这里我根据描述选择的gcc-linaro-arm-linux-gnueabihf-raspbian-x64。
(举例修改./bashrc文件添加export PATH=$PATH:/home/goodboy/raspeberrypi/tools/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin)
树莓派基础操作-经验总结

获取内核配置、编译内核

编译内核前需要先获取配置,可以选择从default自己配置,也可以从外部设备获取后导入。我选择从当前设备获取。
备注:如果你的环境没有编译过,可能缺少很多工具,类似如下需要安装:sudo apt install bc bison flex libssl-dev make

// 1 在树莓派操作,导出内核配置
sudo modprobe configs // 在/proc/config.gz生成内核配置
sudo cp /proc/config.gz ./ // 把config.gz 拷贝出来,可以用samba或者自己u盘操作,导出到虚拟机ubuntu
// 2 在ubuntu操作,内核配置导入源码根目录
zcat config.gz >.config //linux内核源码下执行,生成.config文件
// 3 在ubuntu操作,在源码目录执行配置 编译命令,zImage内核镜像,modules是内核模块,dtbs设备树
KERNEL=kernel7l
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
树莓派镜像升级

把树莓派sd卡连接ubuntu,make module_install把 module安装到sd卡的rootfs区中,
把zImage、dtb、overlay相关文件覆盖到sd卡的boot分区(注意zImage要变成kernel7l.img)

sudo env PATH=$PATH make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/media/wy/rootfs modules_install
cp /home/wy/raspeberrypi/linux/linux-rpi-4.19.y/arch/arm/boot/zImage /media/wy/boot/kernel7l.img
cp /home/wy/raspeberrypi/linux/linux-rpi-4.19.y/arch/arm/boot/dts/*.dtb /media/wy/boot/
cp /home/wy/raspeberrypi/linux/linux-rpi-4.19.y/arch/arm/boot/dts/overlays/*.dtb* /media/wy/boot/overlays/
cp /home/wy/raspeberrypi/linux/linux-rpi-4.19.y/arch/arm/boot/dts/overlays/README /media/wy/boot/overlays/

覆盖完毕后,把sd卡插回树莓派,启动后正常。这个时候再此确认内核版本

pi@raspberrypi:~/$  uname -r
4.19.127-v7l // 可见已经更新到我们编译的版本

树莓派 用户态应用/内核模块 编译执行

用户态小程序demo

前面已经搭建了交叉编译链,下面在此基础执行程序。
main.c内容如下

#include "stido.h"
int main() {
    printf("---hello word!\n");
    return 0;
}

在ubuntu下执行编译命令,并将编译出的test_bin导入到树莓派(我使用的samba传入)

wy@ubuntu:~/raspeberrypi/test_bin$ arm-linux-gnueabihf-gcc main.c -o test_bin

在树莓派执行testbin文件,输出打印,说明已正常执行

pi@raspberrypi:~/ $ ./test_bin
---hello word!

内核驱动模块demo

前面我们已经搭建了内核编译环境。可以在此基础上编译内核模块;
我的test_ko.c代码如下:

#include <linux/init.h>  
#include <linux/module.h>  
#include <linux/moduleparam.h>  

static int test_init(void)  
{  
    printk("test ko init----\n");  
    return 0;  
}  

static void test_exit(void)  
{  
    printk("test ko deinit----\n");  
    return;
}

MODULE_LICENSE("Dual BSD/GPL");  
module_init(test_init);  
module_exit(test_exit);

Makefile代码如下:

obj-m := test_ko.o  
mobule-objs := test_ko.o
KDIR := /home/wy/raspeberrypi/linux/linux-rpi-4.19.y  
all:  
	make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  
clean:  
	rm -f *.ko *.o *.mod.o *.mod.c *.symvers  modul* 

编译后把ko拷贝到树莓派(这里我用的samba,前面已经连接),用insmod进行加载,加载完成后dmesg能看到内核输出的打印(由于我是用SSH连接,串口输出不能直接看到,需要用dmesg查看),至此,内核模块加载成功。

pi@raspberrypi:~/wy $ sudo insmod test_ko.ko
pi@raspberrypi:~/wy $ dmesg
[  399.997700] test ko init----

参考材料

树莓派源码 git:https://github.com/raspberrypi
树莓派官网:https://www.raspberrypi.org/
wiki:https://wiki.gentoo.org/wiki/Raspberry_Pi

本文地址:https://blog.csdn.net/runafterhit/article/details/107871554

相关标签: ARM嵌入式类