树莓派内核编译(5)
树莓派高阶开发课程
=========================================================
1. ubuntu18.04版本安装
让程序猿搭建环境太搞笑了,轻松easy!
linux ubuntu18-04中:
1、mkdir SYSTEM
unzip linux-rpi-4.14.y.zip
2、装交叉工具链(安装之前的方法)
树莓派等芯片带操作系统的启动过程
C51,STM32(裸机)》》》》》》C直接操控底层寄存器实现相关业务。 业务流程型的裸机代码遥控灯: while(1)垃圾桶:WemosD1 LOOP恩智浦智能车: stm32X86,Intel windows启动过程: 电源 -》 BIOS -》windows内核-》C,D盘-》 程序启动(QQ)嵌入式产品: 树莓派,mini2440, mini6410,nanopi,海思,RK(瑞芯微)------人脸识别打卡器,智能家居主控。。。启动过程: 电源-》BootLoader(引导操作系统启动)-》Linux内核-》文件系统(根据功能性来组织文件夹,带访问权限)-》KTV点歌机,安卓启动过程: 电源-》 fastBoot/Bootloader/-》linux内核-》文件系统-》虚拟机-》HOME应用程序-》点某图标打开某APPBootLoader: 一阶段 让CPU 跟内存,FLASH, 串口,IIC,IIS, 数据段,打交道,驱动这些设备(汇编和C结合)二阶段: 引导Linux内核启动 (纯C)
3. 树莓派Linux源码目录树分析
https://www.cnblogs.com/senior-engineer/p/4929703.html大约1.3w个C文件 1100w行代码Linux是开源,免费,LInux开源社区工作者共同维护,爱好 Linux是一个开源的,支持多架构多平台代码 =非常牛逼可以执行非常高但是Linux内核编译出来一般就几M. 4M因为支持多平台,多架构,所以编译之前要配置,配置成适合的目标平台来用ARM海思 友善之臂 RK 树莓派 nanoPiX86PowerPCMIPS
4. 树莓派Linux源码配置
https://blog.csdn.net/nicekwell/article/details/78482833
sudo apt-get install bc
sudo apt-get install libncurses5-dev libncursesw5-dev(ncurses的库)
sudo apt-get install zlib1g:i386
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5(ncurses的库)
驱动代码的编写驱动代码的编译需要一个提前编译好的内核编译内核就必须配置配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码find . -name *_defconfig(找树莓派.config)第一种方式:cp 厂家.config .config第二种方式:make menuconfig 一项项配置,通常是基于厂家的config来配置第三种方式:完全自己来如何配置树莓派的Linux内核驱动两种加载方式:* 编译进内核 zImage包含了驱动M 模块方式生成驱动文件xxx.ko 系统启动后,通过命令inmosd xxx.ko 加载内核配置:ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig指定ARM架构 指定编译器 树莓派 主要核心指令
树莓派Linux内核编译
5.1 编译:ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs指定用多少电脑资源进行编译zImage生成内核镜像modules要生成驱动模块dtbs生成配置文件5.2 编译成功后,看到源码树目录多了vmlinux,失败则无此文件 ( yuanzixuan@ubuntu:~/SYSTEM/linux-rpi-4.14.y$ ls)成功后,目标zImage镜像arch/arm/boot底下5.3 打包zImage成树莓派可用的xxx.img./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img注意:dmesg 用来看usb挂载的信息(此时需要把usb插到linux的ubuntu中)5.4 数据拷贝mkdir data1 data2挂载U盘sudo mount /dev/sdb1 data1 一个fat分区,是boot相关的内容,kernel的imgsudo mount /dev/sdb2 data2 一个是ext4分区,也就是系统的根目录分区。安装modules, 设备驱动文件: hdmi usb wifi io ...(少了这个一些wifi设备文件会不能用)yuanzixuan@ubuntu:~/SYSTEM/linux-rpi-4.14.y$必须在这个路径下sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/chenlc/data2 modules_install (这里的data2就是ext4分区) 安装更新 kernel.img 文件,注意镜像名字是kernel7.img先备份cd /home/chenlc/data1cp kernel7.img kernel7OLD.img再把编译新生成的拷贝到data1,起名kernel7.imgcp kernel_new.img /home/yuanzixuan/data1/kernel7.img(~/SYSTEM/linux-rpi-4.14.路径)md5sum kernel_new.img md5sum /home/yuanzixuan/data1/kernel7.img (比较这里的大小,应该是一样)拷贝配置文件(是为了能够加载驱动)cp arch/arm/boot/dts/.*dtb* /home/chenlc/data1cp arch/arm/boot/dts/overlays/.*dtb* /home/yuanzixuan/data1/overlays/现在可以把卡放在树莓派上去了uname -r :用来查看当前的版本
6. 文件系统
1. 什么是文件系统?
常规认知: 根目录
文件系统是操作系统用于明确存储设备组织文件的方法。
以上说的方法:就是文件管理系统(程序),简称文件系统
2. 文件系统(文件管理系统的方法)的种类有哪些?FAT VFAT NTFS EXT1/2/3/4 HFS ....树莓派查看文件系统的命令: df -Tvfat : boot(bootloader, kernel)ext4 : 根目录tmpfs : 内存文件系统3. 什么是分区?windows: 随意(面向普通用户PC),目录即分区C(装系统的位置)也可以随意在C盘存放文件. D盘(用户随意发挥)Linux: 按照功能来分区,每个分区严格存放文件(开发者) 嵌入式系统可以分为4个区,分别是bootloader、 启动代码para、 启动代码向内核传递参数的位置kernel、 内核分区根分区等 文件系统结构2. 什么是文件系统目录结构?常规认知: 根目录,不是分区,和windows不同2. 什么虚拟文件系统Virtual File System ?vfs就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用的接口,3. 虚拟文件系统有什么作用?简化应用程序员的开发不管是什么文件类型,不管文件是磁盘还是设备,都只用open read write统一操作
7. Linux内核驱动基础框架
linux里面:
pin4driver2.c 的编译
cp /mnt/hgfs/dama/pin4driver2.c ~/SYSTEM/linux-rpi-4.14.y/drivers/char
修改makefile,告诉编译器,需要编译该驱动文件夹
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make modules
scp drivers/char/pin4driver2.ko pi@192.168.0.105:/home/pi
yuanzixuan@ubuntu:中
pin4Test.c的编译 ( ~/SYSTEM/linux-rpi-4.14.y:这个路径下)
arm-linux-gnueabihf-gcc pin4Test.c -o pin4test
scp pin4test pi@192.168.0.105:/home/pi
树莓派里面:
sudo insmod pin4driver2.ko(加载驱动) 卸载驱动sudo rmmod pin4driver2 不需要写ko
ls /dev/pin4 -l(看效果)
lsmod (列出内核的驱动文件)
sudo chmod 666 /dev/pin4(修改权限)
dmesg |grep pin4(dmesg打印内核的printk)
./pin4test(用来验证一下)
cat /proc/cpuinfo(查看树莓派的型号)
8.地址
unix设计与实现
内核的设计文档
1、总线地址2、物理地址3、虚拟地址
BCM2835 树莓派3b cpu的型号 他是ARM-cotexA53架构
10.驱动两大利器 : 电路图:作用:通过电路图找到寄存器
和芯片手册
芯片手册第六章:
GPFSEL0 GPIO Function Select 0 功能选择 输出/输入(GPIO Function Select Register) 32位
14-12 001 = GPIO Pin4 an outpu
GPSET1 GPIO Pin Output Set 00 No effect1 Set GPIO pin nGPCLR0 GPIO Pin Output Clear 0 清0
0 = No effect
1 = Clear GPIO pin n
恢复ubuntu网络的图标
1、删除NetworkManager缓存文件
service NetworkManager stop
sudo rm /var/lib/NetworkManager/NetworkManager.state
service NetworkManager start
2、修改/etc/NetworkManager/NetworkManager.conf
managed=true
3、重启NetworkManager
sudo service network-manager restart
11摄像头:
(按照下面网址安装)在树莓派里
1、https://jingyan.baidu.com/article/47a29f2474a555c01523994c.html
{注意:在 mjpg-streamer/mjpg-streamer-experimental目录下,先git下面的
sudo apt-get update
sudo apt-get install subversion
sudo apt-get install libjpeg8-dev
sudo apt-get install imagemagick
sudo apt-get install libv4l-dev
sudo apt-get install cmake
sudo apt-get install git
sudo git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
make all
sudo make install
}
2、修改配置文件
cd /mjpg-streamer/mjpg-streamer-experimental 下
vi start.sh
./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -w ./www"(把uvc 换成 raspicam)
input_raspicam.sosudo raspi-config(把摄像头打开)
选择interfacing Prtions
camera在 cd mjpg-streamer/mjpg-streamer-experimental/
./start.sh
http://IP地址:8080raspistill -o image.jpg 用来照相
12:http;
gg = G代码对齐
~就是我们的工作目录,就是/home/yuanzixuan
https://cnblogs.com/xietianjiao/p/13255099.html
1、下载curl-7.71.1.tar,gz 到ubuntu中 解压(tar xvf curl-7.71.1.tar,gz )
2、cd docs vi INSTALL.md(这个里面写了安装的方式)3、(配置)
cd cd curl-7.71.1/./configure --prefix=$PWD/_install (--host== 写交叉编译arm-linux..... )树莓派也需要这样写,因为树莓派里的gcc就是面向arm-linux 所以不需要写arm-linux...
make
make install4、export LD_LIBRARY_PATH=./curl-7.71.1/_install/lib/(配置环境变量)gcc demo1.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl(连接库)前面的是链接头文件,后面的是库注意:https://www.cnblogs.com/wainiwann/p/4210343.html(export LD_LIBRARY_PATH 的使用)
库文件默认是在/usr/lib底下的,但我们安装的实在curl-7.71.1/_install/lib/下,所以有链库vi /tmp/get.html
翔云:
1、写相关的代码之后:~/httpHandler/curl-7.71.1$ rm _install/ -rf,删除此目录下的东西,配置ssl
~/httpHandler/curl-7.71.1$ rm _install/ -rf
2、cd docs vi INSTALL.md(配置方法在这下面)3、./configure --prefix=$PWD/_install --with--ssl4、wget https://www.openssl.org/source/openssl-1.1.0e.tar.gz(安装openssl)tar xvf openssl-1.1.0e.tar.gz
./config
make
sudo make install./configure --prefix=$PWD/_install --with--ssl
make
make installgcc demo2.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib -lcurl5、bas 查看base64
base64 (图片)注意:首先得base64 () 有个tmpFile:编程代码中有写
树莓派内核编译(5)相关推荐
- linux编译树莓派内核,编译树莓派 4B Linux 5.9 内核
来自 九年吃菜粥 的发帖. 文中的操作是在 x86 docker 的 Ubuntu 容器中进行操作,因为子系统编译时好像 CPU 吃不满. 文中命令全部用 root 用户执行. 1.首先下载树莓派的内 ...
- Linux树莓派开发——配置树莓派内核源码,内核编译,更换树莓派Linux内核
目录 一.树莓派Linux源码配置 1.配置的三种方法 2.内核源码的下载 二.树莓派内核编译 1.树莓派的编译 2.生成vmlinux 三.更换树莓派内核的详细步骤 一.树莓派Linux源码配置 ...
- 树莓派交叉编译 内核编译 - HQ
树莓派交叉编译 & 内核编译 - HQ 文章目录 树莓派交叉编译 & 内核编译 - HQ @[toc] 注意 树莓派交叉编译 引入 交叉编译工具链的安装 交叉编译使用举例 树莓派源码分 ...
- Liunx树莓派(ARM)开发篇—第十四章、树莓派Linux内核编译步骤(超详细、图文结合)
对树莓派内核源码进行配置后,下一步要进行树莓派Linux内核编译 以下步骤均在PC端虚拟机上完成 准备材料:PC端虚拟机.树莓派交叉编译工具.树莓派内核(交叉编译工具.内核下载步骤见树莓派内核源码) ...
- 树莓派-linux内核编译
树莓派-linux内核编译 装虚拟机[^1] 配置共享文件夹 配置交叉编译工具 下载树莓派linux系统内核[^3] 树莓派等芯片带操作系统的启动过程 树莓派linux源码目录树 树莓派linux源码 ...
- 树莓派镜像备份/内核编译和更换/EC200U上网
树莓派镜像备份/内核编译和更换/EC200U上网 操作涉及树莓派linux内核替换,由于我的树莓板子里跑了ROS,以免环境破坏,所以先进行镜像备份. 备份本机树莓派img 工具:win32diskim ...
- 基于树莓派4b(raspberry pi 4b)内核编译流程,交叉编译环境搭建,loadable kernel module (LKM)编译方法
树莓派4b编译Linux内核&交叉编译环境的搭建 使用树莓派4b编译内核很简单,具体可以参考以下树莓派官网中关于Build the Kernel的内容: https://www.raspber ...
- 编译64位linux内核,为树莓派4编译64位的内核
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 树莓派从3代开始就已经是64位的CPU了,64位的CPU当然要使用64位的系统了.但是即便性能更强大的树莓派4都已经发布 ...
- 树莓派Linux内核编译、文件系统、Linux内核驱动基础框架、驱动测试步骤、总线地址
树莓派高阶开发课程 1. ubuntu18.04版本安装 让程序猿搭建环境太搞笑了,轻松easy! ========================================= ...
最新文章
- 销售找客户的软件_实用的销售客户管理软件
- 瑞幸:不会死,也没有稳
- python string模块安装_python String模块-阿里云开发者社区
- java数据类型之间的转换_Java基本类型之间的转换
- jpg转dwg格式转换器_aac转mp3格式转换器怎么使用
- 重庆科技学院c语言程序设计报告,2020年重庆科技学院《911程序设计综合》硕士研究生招生复试大纲...
- 网上路径的图片有时候遍历不出来_最短路径问题(1)——Dijkstra算法
- [李景山php]每天TP5-20161205|Loader.php-3
- bdm导入mysql_MySQL数据库导入教程
- 传奇服务器人物技能怎么修改,传奇服务端上线0级技能,直接设置3级技能的设置方法...
- python paramiko ssh-解决强制修改密码登录问题
- uni-app公用方法
- Win11家庭版如何安装组策略编辑器
- netty 实现消息群发
- 盘点国内外十大免费CDN网站加速服务
- unity3d播放透明mov格式视频的一种方式
- 命令模式在开源代码中的应用
- c3p0连接池使用完毕后连接返还
- 智能驾驶进入新周期:从「定点量产」到「做大做强」
- 论如何优雅地知道OkHttp的请求时间