文章目录

  • 一、概念
    • 树莓派---基于ARM的微型电脑主板
    • 树莓派4B基础硬件参数---4核 A-72/4G DDR4
  • 二、原生树莓派linux 搭建与使用
    • 1、树莓派linux使用环境搭建---SSH命令行操作/samba传输文件
    • 2、命令行界面基础操作---linux命令行使用
    • 3、虚拟机arm交叉编译链环境搭建
    • 4、树莓派linux 用例编译执行
      • 用户态小程序demo
      • 内核驱动模块demo
    • 5、【补充】树莓派串口连接与使用(用于boot调试)
  • 三、树莓派RT-Thread环境 搭建与使用
    • 1、树莓派RT-Thread使用环境搭建---串口+Ymodem传输
  • 参考

个人购买了一块树莓派4B,目的是搭建一个linux&&python环境,用于在家做一些调试学习;
由于需要做驱动开发调试,需要搭建一个交叉编译链环境,这里我选择下载对应内核版本源码包进行编译,方便调试;
环境1-linux: PC(win10:SSH访问树莓派)+虚拟机(Ubuntu+arm交叉编译链)+ 树莓派(ARM/Linux);本内容对于linux/shell等操作基础使用不做描述;
环境2-rtthread:(学习rtthread,树莓派也搭建了一个uboot+rtthread),: PC(win10:串口访问树莓派)+虚拟机(Ubuntu+arm交叉编译链)+ 树莓派4B(uboot/rt-thread系统),为了避免每次都需要烧写rt-thread,借助uboot的TFTP和Ymodem将内核镜像转移到树莓派的内存中,然后启动执行。

一、概念

树莓派—基于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

二、原生树莓派linux 搭建与使用

整体环境:PC(win10:SSH访问树莓派)+虚拟机(Ubuntu+arm交叉编译链)+ 树莓派4B(ARM/Linux系统)

1、树莓派linux使用环境搭建—SSH命令行操作/samba传输文件

1)外壳及配件组装:到手后第一步,先组装外壳/散热风扇/散热片;
2)SD卡烧写镜像:树莓派没有板载FLASH但支持SD卡启动,需要下载相应镜像烧写到SD。
管网地址http://www.raspberrypi.org/downloads,这里我没有烧写官网镜像,选择是购买店家提供的镜像(安装vim、gcc、打开SSH和WIFI设置、打开VNC远程桌面服务,默认用户名称pi,密码yahboom);烧写工具使用的是Win32 Disk Imager;
3)上电使用配置WIFI网络:插上SD卡后,上电使用,这里我先使用的hdmi显示器,配合一个鼠标 键盘,配置完成WIFI链接。
4)释放外设,远程连接使用:在完成上电网络连接后,可以释放显示器,鼠标,键盘。我通过SSH远程连接树莓派进行操作(烧写镜像已经打开了相关支持,蓝莓派的动态IP我是直接查看路由器IP分配得到),个人SSH工具用的MobaXterm;

5)开启samba服务(用于文件传输)
下载:sudo apt-get install samba;配置:sudo vim /etc/samba/smb.conf 添加

[share]comment = sharepath = /home/pi/read only = nocreate mask = 0777directory mask = 0777valid users = pipublic = yesbrowseable = yeswritable = 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交叉编译链环境搭建

1)下载源码(对应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)

2 )获取内核配置、编译内核
编译内核前需要先获取配置,可以选择从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

3)树莓派镜像升级
把树莓派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 // 可见已经更新到我们编译的版本

4、树莓派linux 用例编译执行

用户态小程序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----

5、【补充】树莓派串口连接与使用(用于boot调试)

树莓派4b的外设共两个串口,硬件串口(/dev/ttyAMA0,硬件实现 性能高、可靠),mini串口(/dev/ttyS0,无专用时钟源而由CPU时钟提供,波特率受到内核时钟的影响)。serial0(命令端口),serial1(蓝牙),要留意哪个用的硬件串口ttyAMA0。
树莓派4B的引脚如下:

购买的串口线类似:

连线:串口线的VCC不接,GND接14号GND,RXD接8号TXD,TXD接10号RXD,将usb那头插入电脑
配置文件打开串口:打开SD卡中文件config.txt,确认添加 1) enable_uart=1 表示打开串口。2)dtoverlay=disable-bt 关闭蓝牙(gpio冲突);修改cmd.txt删除以下部分console=serila0,115200 关闭串口登录;
打开串口连接工具:波特率设置115200

三、树莓派RT-Thread环境 搭建与使用

树莓派rtthread主要三种方式:1、替换SD卡镜像内的kernel文件(每次要写SD卡);2、用uboot+tftp(通过网络方式进行下载,需要有网线插入,宿主机搭建一个tftp的服务器);3、用uboot+串口ymodem(利用了uboot里面的ymodem的功能,只需要将固件通过串口加载到内存,然后指定内存的运行的起始地址);
我们选择的第三种:PC(win10:串口访问树莓派)+虚拟机(Ubuntu+arm交叉编译链)+ 树莓派4B(uboot/rt-thread系统),为了避免每次都需要烧写rt-thread,借助uboot的TFTP和Ymodem将内核镜像转移到树莓派的内存中,然后启动执行。

1、树莓派RT-Thread使用环境搭建—串口+Ymodem传输

1)RT-Thread源码下载与编译—详细流程见 官网手册
第一步,下载源码:https://gitee.com/rtthread/rt-thread ,下载的rt-thread-gitee_master分支(看了下这里支持raspi4-64)。
第二步,置编译工具,这里选择的gcc-arm-none-eabi-6_2-2016q4-20161216-linux.tar.bz2(官网手册建议),Linux环境下需要修改编译器目录设置,修改bsp/raspberry-pi/raspi4-32/rtconfig.py中的:

# 修改EXEC_PATH为编译工具bin目录
EXEC_PATH   = r'/opt/gcc-arm-none-eabi-6_2-2016q4/bin'
# 修改PREFIX为编译器对应前缀
PREFIX = 'arm-none-eabi-'

第三步,编译源码,回到bsp/raspberry-pi/raspi4-32目录中,运行以下命令:scons
安装过程依赖(QEMU、Scons、ncurses 库,如果没有安装 参考RT-Thread官方文档指导)

bsp/raspberry-pi/raspi4-32# scons
# 略
CC build/kernel/src/scheduler.o
CC build/kernel/src/thread.o
CC build/kernel/src/timer.o
LINK rtthread.elf
arm-none-eabi-objcopy -O binary rtthread.elf kernel7.img
arm-none-eabi-size rtthread.elftext    data     bss     dec     hex filename588792     2848   61136  652776   9f5e8 rtthread.elf
scons: done building targets.

参考

树莓派源码 git:https://github.com/raspberrypi
树莓派官网:https://www.raspberrypi.org/
wiki:https://wiki.gentoo.org/wiki/Raspberry_Pi
高效搭建树莓派3b rt-thread的开发环境:https://cloud.tencent.com/developer/article/1599601
树莓派串口详解:https://blog.csdn.net/bat2fly/article/details/106443561
树莓派4b串口通信配置:https://blog.csdn.net/naruhina/article/details/105300566

树莓派基础操作-经验总结相关推荐

  1. 用树莓派搭建全功能NAS服务器(01):树莓派基础操作OMV搭建

    写在前面 对于文件互传来说,局域网和云盘的操作总是独立的,而且很难将两者的优势合为一体.如果想要集多种优势为一体,那么NAS应该就是较为完美的解决方案了. 在这个系列中我们尽量跳过一些枯燥的理论知识, ...

  2. c4d打开没反应_PS、AI、PR、AE、C4D零基础自学经验分享

    我是一个非美术也非动画影视专业的学生,在自学之前是完全的零基础,因此刚开始做很多东西的时候,经常因为没有审美而被人说我做的东西不好看,不行.其实这对于刚刚开始学习某样东西的人来说是挺打击人的,但是这半 ...

  3. LPC2124单片机的基础操作——GPIO、外部中断、定时器和串口

    LPC2124单片机的基础操作--GPIO.外部中断.定时器和串口 LPC2124的简介 LPC2124之GPIO GPIO简介 编程习惯 代码编写 LPC2124之EINT(外部中断) EINT简介 ...

  4. 树莓派(0):树莓派基础知识

    树莓派(0):树莓派基础知识 开启树莓派之旅 1.什么是树莓派 2.树莓派3B参数表 3.运行环境(Run-Time Environment) 3.1启动代码(Start-up code) 3.2操作 ...

  5. 树莓派基础实验39:解析无线电接收机PWM、SBUS信号

    一.介绍   虽然如今或者将来,5G网络的建设带来人工智能和工业自动化的全面升级,生产活动中劳动力的需求大大减少,大量的劳动力将向内容生产行业和服务行业转移.教育.医疗.娱乐.公共管理等诸多领域,乃至 ...

  6. GNU Radio基础操作与简易MATLAB分析

    GNU Radio基础操作与简易MATLAB分析 GNU Radio流图基本操作 1. 搭建频谱分析仪 搭建一个频谱分析仪的GNU Radio流图程序.在搭建过程中,本人使用了B200mini设备(支 ...

  7. 基于python win32com的visio文件基础操作语句简介及案例展示(家族树自动创建)

    1 写在前面 最近需要给老师们做家族树,向visio模板中套excel数据,但是在手动套模板的过程中发现间距的控制是一个较为繁琐的事情,于是萌生了用python完成这一过程的想法. 在探索的过程中经验 ...

  8. 新编计算机基础教程 pdf,新编计算机基础操作教程.pdf

    高等院校计算机基础教育教材 (第2 版) 本书编委会 编 [内容提要]本书是为计算机基础教学和计算机培训编写的基础教材.特点是基于Windows 98/2000/XP 环境,强调其实用性.先进性和可操 ...

  9. 王者荣耀五周年,带你入门Python爬虫基础操作(102个英雄+326款皮肤)

    简单的目录 1.概述 2.网页分析 2.1.html页面源数据 2.2.json源数据 3.数据请求 4.数据解析 4.1.html数据解析 4.1.1.bs4 4.1.2.xpath 4.2.jso ...

最新文章

  1. 十万浙企上云 阿里云崛起的最大征候?
  2. eclipse新发现功能之dos和terminal(ssh连接)
  3. python如何输出两列数据_Python-如何将一列分为两列?
  4. 15个最佳的 JavaScript 表单验证库
  5. 自动化测试,从入门到跑路1
  6. Asp.net 构建可扩展的的Comet Web 应用(一)
  7. matlab 数据透视表,excel表格怎样做数据透视表:如何将excel表格中大量数据导入matlab中并作图...
  8. 微信飞机小游戏java_Shoot Plane 仿微信打飞机游戏的java实现
  9. html 360 浏览器图片自适应,360浏览器看图模式 一键保存高清套图
  10. 每周推荐短视频:道哥表达了对自动驾驶技术的感恩之情
  11. 用python实现多人聊天室小项目笔记
  12. wireless_ultimate技术所得
  13. 看 PrisonBreak,学美语
  14. 执法仪接入GB28181平台实现实时监控、对讲、报警、定位等管理
  15. 计算机领域职业简介-PM,RD,FE,UE,UI,QA,OP,DBA,BRD,MRD,PRD,FSD等缩写的全称解析
  16. 个人小程序支持哪些小程序服务类目
  17. C语言:逗号表达式(辨析)
  18. Geodesic.WGS84.Inverse通过两点经纬度计算两点间的方位角
  19. 数据库表的设计什么时候可以存在冗余?
  20. Xilinx ISE系列教程(8):读取FPGA芯片唯一ID号

热门文章

  1. javaweb:web.xml配置详解
  2. 行政区划编码映射关系-数据处理
  3. 交通也迈入大数据时代:中国高速公路、铁路里程均居世界首位
  4. web程序设计(前端)实验二——表单设计
  5. android 4.3以上修改DNS 及 流程(netd)
  6. Nor Flash笔记--看一图看懂并学会计算Flash大小
  7. sqlserver战德臣_数据库系统设计课程最新版 数据库系统上中下三部(哈尔滨工业大学 战德臣教授主讲)...
  8. 2022.1.17 学习笔记 (SPN中业务是如何传输的,主要是业务切片的调度编排)
  9. MOTOMAN机器人网络控制的实现
  10. 单片机如何控制继电器呢?