树莓派学习笔记,本文图片文字皆为转述
配置树莓派的Linux内核
驱动两种加载方式:
* 编译进内核 zImage包含了驱动
M 模块方式生成驱动文件xxx.ko 系统启动后,通过命令inmosd xxx.ko 加载
内核配置:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7
make bcm2709_defconfig
指定ARM架构 指定编译器 树莓派 主要核心指令
树莓派Linux内核编译
1 编译:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7
make -j4 zImage modules dtbs
指定用多少电脑资源进行编译
zImage生成内核镜像
modules要生成驱动模块
dtbs生成配置文件
2 编译成功后,看到源码树目录多了vmlinux,失败则无此文件
成功后,目标zImage镜像arch/arm/boot底下
3 打包zImage成树莓派可用的xxx.img
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
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
文件系统
1. 什么是文件系统?
常规认知: 根目录
文件系统是操作系统用于明确存储设备组织文件的方法。
以上说的方法:就是文件管理系统(程序),简称文件系统
2. 文件系统(文件管理系统的方法)的种类有哪些?
FAT VFAT NTFS EXT1/2/3/4 HFS ....
树莓派查看文件系统的命令: df -T
vfat : boot(bootloader, kernel)
ext4 : 根目录
tmpfs : 内存文件系统
3. 什么是分区?
windows: 随意(面向普通用户PC),目录即分区
C(装系统的位置)也可以随意在C盘存放文件. D盘(用户随意发挥)
Linux: 按照功能来分区,每个分区严格存放文件(开发者)
嵌入式系统可以分为4个区,分别是
bootloader、 启动代码
para、 启动代码向内核传递参数的位置
kernel、 内核分区
根分区等 文件系统结构
4. 什么是文件系统目录结构?
常规认知: 根目录,不是分区,和windows不同
5. 什么虚拟文件系统Virtual File System ?
vfs就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用的接口,
6. 虚拟文件系统有什么作用?
简化应用程序员的开发
不管是什么文件类型,不管文件是磁盘还是设备,都只用open read write统一操作
Linux内核驱动基础框架
a.驱动代码编写,参考pin4test.c
b.编译内核
1把驱动代码拷贝到driver/char
2修改Makefile告诉编译器,要编译该驱动文件
3 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make modules
驱动测试步骤
内核驱动装载:sudo insmod xxx.ko
内核驱动卸载:sudo rmmod xxx 不需要写ko
查看内核模块:lsmod
验证步骤:
a.装载驱动
b. 驱动装载后生成设备 比如/dev/pin4,通过sudo chomd 666 dev/pin4 添加访问权限
c.运行测试程序调用驱动
d.内核的printk是内核的printf,通过dmesg查看打印消息