目录
为什么学习源码配置:有时候需要编写驱动代码,驱动代码的编译就需要一个编译好的内核来实现,编译内核就必须配置
4.将树莓派的SD卡使用读卡器插到虚拟机设备里,使用dmesg查看设备信息编辑
一:树莓派等芯片带操作系统的启动过程
- C51、STM32(裸机)
- C直接操控底层寄存器相关业务,属于业务流程型的裸机代码
- x86,Intel,Windows
- 电源-BIOS-Windows内核-C/D盘-程序启动(QQ)
- 树莓派,mini2440,mini6410,nanopi
- 电源-boot loader-Linux内核-文件系统(根据功能性来组织文件夹,带访问权限)
- KTV点歌机,人脸识别打卡机,智能家居主控
- 安卓
- 电源-fast boot/boot loader-Linux内核-文件系统-虚拟机-HOME应用程序-点某程序打开某APP
- boot loader
- 一阶段:让CPU与内存,FLASH,串口,IIC,IIS,数据段打交道,驱动这些设备(汇编+C)
- 二阶段:引导Linux内核启动(纯C)
二:关于Linux源码文件目录的解读
- Linux源码大概有1.3w个C文件,1100w行代码
- Linux是开源,免费的,是由Linux开源社区工作者共同开发维护的
- 可以支持多架构多平台代码
- 可移植性非常高
- 但是一般内核编译出来的只有几M的大小(支持多架构,多架构下又有多个不同平台使用)
- 它可以支持多平台多架构,所以编译前要配置成合适的目标平台来用
- ARM
- 海思,RK,树莓派等
- 海思,RK,树莓派等
- X86
- powerPC
- MIPS
- ARM
Linux内核源代码目录树结构 - maxiongying - 博客园
- arch:硬件相关
- 包括kernel(内核核心部分)、mm(内存管理)、math-emu(浮点单元仿真)、lib(硬件相关工具函数)、boot(引导程序)、pci(PCI总线)和power(CPU相关状态)。
- block:块设备相关
- drivers:驱动程序相关
- Documentation:内核各设备的解释
- fs:文件系统
- include:头文件
- init:内核的初始化(与系统引导代码不同)
- ipc:进程间通信
- kernal:内核相关,包括进程调度,定时器等
- lib:库文件代码
- mm(memory manage):内存管理代码
- net:网络相关
- scripts:配置内核文件的脚本文件
- security:SELinux的模块
- sound:音频设备的驱动程序
- usr:实现一个cpio