树莓派学习笔记

本文详细介绍了嵌入式系统的概念及其特点,包括常见的处理器架构如ARM和Intel,以及交叉编译的过程。同时,讲解了树莓派的配置、网络设置和驱动开发,涉及到Linux内核的配置、编译以及驱动加载方式。还探讨了文件系统、虚拟文件系统的工作原理以及Linux启动流程。此外,提到了超声波传感器HC-SR04的使用及串口通信的基本知识。
摘要由CSDN通过智能技术生成

嵌入式系统:以应用为中心,计算机技术为基础,软硬件可裁剪,对可靠性,成本,体积,功耗等有严格要求的计算机系统。

架构:ARM(stm32,高通,骁龙,海思,树莓派3b(cortex-A53d处理器))

Intel(i5,i7处理器)

x86

MIPS

powerPC(苹果,摩托罗拉)

树莓派网络登录 sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

network={

ssid= ;

psk= ;

}

固定IP:sudo nano /etc/rc.local exit 0 前ifconfig wlan0 192.168.1.48

打开ssh登录:sudo raspi-config 5.Interface Options 2.ssh

换源:sudo nano /etc/apt/source.list deb... sudo apt update

安装远程桌面:sudo apt-get install xrdp

分模块编程思想:功能责任划分,方便调试,主程序简洁

静态函数库,共享函数库(动态加载库)

静态函数库编译时就整合到程序中,程序运行前函数库就已经被加载。优点是程序运行时不需要调用外部函数库更方便。缺点是编译文件比较大,且库发生变动需要重新编译。

生成:gcc b.c -c ar rcs libnew.a b.o

动态使用动态函数库的好处是,程序生成的可执行程序体积比较小,且升级函数库时无需对整个程序重新编译;缺点是,如果程序执行时函数库出现问题,则程序将不能正确运行。

生成:gcc a.c -shared -fpic b.c -o libnew.so.a.b.c

fpic 生成位置无关码 主版本,次版本,发行版本号

动态库运行时需指定库目录

vi  run.sh :export LD_LIBRARY_PATH=动态库目录 ./a.out

chmod +x run.sh

du 计算文件大小

串口通信:数据格式(数据位,停止位,奇偶校验位)波特率

Linux一切皆文件,树莓派串口ttyAMA0

sudo vi/boot/cmdline.txt 删除consolve=serial,115200 sudo reboot

HC-SR04(超声波模块)

给Trige引脚10us高电平,开始发送超声波,Echo引脚变为高电平直到收到返回的超声波。测量距离用到<sys/time.h>下

gettimeofday((struct timeval*)t1,NULL)函数两次,时间相减,利用超声波在空间中速度340m/s换算出距离,struct timeval结构体包含秒(t1.tv_sec)和微秒(t1.tv_usec)。

交叉编译:在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统

我们在windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行,我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行。编译:是在一个平台上生成在该平台上的可执行代码

C51 交叉编译的发生在keil(集成环境上面)

为什么:目标主机资源匮乏,无法运行编译器 以及有时候目的平台没有建立,没有操作系统。

宿主机(host) :编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。

目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行

交叉编译器、交叉编译工具链

交叉编译工具环境变量配置:

 echo $PATH 获得当前环境变量的值

2.1 临时有效,配置环境变量

PATH 环境变量

export PATH=$PATH:$PWD

2.2 永久有效,配置环境变量

修改工作目录下的.bashrc 隐藏文件,配置命令终端的

vi /home/CLC/.bashrc 在文件最后一行加入:

exportPATH=$PATH:交叉编译工具目录

source /home/CLC/.bashrc 加载配置文件,马上生效配置。

file test 查看目标属性

编译后传到目标机:scp a.out pi@192.168.1.48:home/pi/Desktop

带wiringPi库的交叉编译

arm-linu-gnueabihf-gcc a.c -I(头文件路径)-i(头文件名字)-L(库文件路径)-l(库名字)

软链接:类似于Windows快捷方式,不占用空间,本质是包含有另一文件位置信息的文本文件。(ls -al 可看到软连接箭头指向) ls -s a

硬链接:在指定位置生成和源文件大小相同的文件(保持同步)ln a b

uname -r 查看树莓派版本号

启动过程:单片机:电源,c语言直接操控底层寄存器

x86,Inter(windows):电源,BootLoader,windows内核,cd盘,应用

嵌入式产品(ktv点歌机):电源,BootLoader,Linux内核,文件系统,应用

安卓:电源,BootLoader,Linux内核,文件系统,虚拟机,应用程序

bootloader:一阶段让CPU和内存,flash,串口,iic,iis数据段打交道(c和汇编)

二阶段引导Linux内核启动(纯c)

4. 树莓派Linux源码配置

驱动代码的编写

驱动代码的编译需要一个提前编译好的内核

编译内核就必须配置

配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核

厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码

第一种方式:cp 厂家.config .config

第二种方式:make menuconfig 一项项配置,通常是基于厂家的config来配置

第三种方式:完全自己来

如何配置树莓派的Linux内核

驱动两种加载方式:

* 编译进内核  zImage包含了驱动

M 模块方式生成驱动文件xxx.ko  系统启动后,通过命令insmod xxx.ko 加载

内核配置:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig

指定ARM架构   指定编译器     树莓派          主要核心指令

5. 树莓派Linux内核编译

5.1 编译:

    ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs

指定用多少电脑资源进行编译 zImage生成内核镜像 modules要生成驱动模块 dtbs生成配置文件

5.2 编译成功后,看到源码树目录多了vmlinux,失败则无此文件成功后,目标zImage镜像arch/arm/boot底下

5.3 打包zImage成树莓派可用的xxx.img

./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img

5.4 数据拷贝

mkdir data1 data2挂载U盘

sudo mount /dev/sdb1 data1   一个fat分区,是boot相关的内容,kernel的img

sudo mount /dev/sdb2 data2   一个是ext4分区,也就是系统的根目录分区。

安装modules, 设备驱动文件: hdmi usb wifi io ...

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/chenlc/data2 modules_install

安装更新 kernel.img 文件,注意镜像名字是kernel7.img先备份

cd /home/chenlc/data1 cp kernel7.img kernel7OLD.img

再把编译新生成的拷贝到data1,起名kernel7.img

cp kernel_new.img /home/chenlc/data1/kernel7.img

拷贝配置文件

cp arch/arm/boot/dts/.*dtb* /home/chenlc/data1

什么是文件系统?

文件系统是操作系统用于明确存储设备组织文件的方法,是一种程序解决方案。

种类 FAT/VFAT NTFS HFS ext4 tempfs

windows分区物理磁盘上连续,Linux未必

虚拟文件系统(Virtual File System)是对文件系统的抽象,为各种文件提供了一个通用接口,简化上次程序员的开发,不管是文件还是设备都用open,read,write统一操作。

用户空间调用open函数后,系统触发一个异常,发生软中断,中断号为0x80,由此进入内核态调用sys_call进入vfs,再调用虚拟文件系统的sys_open,sys_open根据设备名,主次设备号在内核驱动链表中找到对应驱动函数,进而调用驱动函数里的open最后对底层寄存器进行操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值