ARM树莓派高级开发——linux内核源码、树莓派源码编译、SD卡挂载

本文介绍了如何进行ARM树莓派的Linux内核开发,包括下载树莓派内核源码、配置Linux内核以适应树莓派、编译内核及挂载SD卡。详细讲述了BootLoader和Linux内核的启动过程,以及根目录下各文件夹的功能。同时,文章提供了编译内核所需的库安装和内核配置步骤,指导完成内核编译和打包zImage文件,最后讨论了如何将编译成果挂载到SD卡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux内核开发基础(linux内核源码、树莓派源码编译、SD卡挂载)

首先下载树莓派linux内核源码:

下载网址:https://github.com/raspberrypi/linux

在树莓派使用指令:uname -r查看当前树莓派的版本号,然后选择对应的linux内核版本号进行下载
在这里插入图片描述
在这里插入图片描述

将linux内核源码从共享文件夹拷贝到SYSTEM文件夹:cp linux-rpi-4.19.y.zip/home/fhn/SYSTEM/
然后使用指令对该压缩文件进行解压:unzip linux-rpi-4.19.y.zip
在这里插入图片描述

树莓派等芯片带操作系统的启动过程

之前学习的51和32(裸机)是直接使用C语言操控底层寄存器实现相关业务,这是业务流程型(就是设备有什么功能,要实现什么功能)裸机代码。
而linux的BootLoader是超级裸机(BootLoader的主要作用是引导操作系统启动)
BootLoader: 刚开始
一阶段学习就是让CPU和内存(FLASH)、串口(IIC、IIS)数据段打交道,就是驱动这些设备(主要用到汇编和C)
二阶段就是对于引导linux内核启动(纯C)

X86架构(比如:Intel),跑的是windows操作系统,上电启动的时候: 首先是启动BIOS然后是启动windows内核,然后就是加载C、D等盘,最后是启动应用程序。
对于其他的嵌入式产品(比如:树莓派、mini24440、mini6410、nanopi、海思、RK(瑞芯微)),这些产品上电后启动过程是:首先启动BootLoader(相当于windows的BIOS吧,但这里叫做BootLoader),然后引导linux内核,linux内核启动完成后就是加载文件系统(和C、D盘不太一样,在linux下是根据功能性来组织文件夹,带访问权限(这就是linux文件系统),就是根目录下的那些东西,可以使用指令:cd / 进入),文件系统起来以后才能跑应用程序(比如:KTV点歌机界面等)。

BootLoader、linux内核、文件系统构成操作系统,就像之前所说的在目的平台还没有建立的时候,需要通过交叉编译让这些东西可以使用

安卓的启动过程: 有很多嵌入式设备都开始运行安卓操作系统,首先硬件上电后,启动fastboot(也叫BootLoader,意思和BootLoader一样),然后引导linux内核,linux内核起来以后加载文件系统(因为底层还是linux),文件系统起来以后开始跑一个运行java代码的虚拟机,虚拟机起来以后开始运行home应用程序(就相当于手机的界面),点击home界面的某图标就可以打开相应的app。

  • 简单介绍,根目录下一些文件夹存放的东西,在嵌入式体统中,为了精简系统。/bin,/dev,/etc,/lib,/proc,/var,/usr
    对于根文件系统来说是必须具有的,其他目录都是可选的。首先使用指令:cd /进入到根目录,然后可以看到下面的一些文件夹。这篇博文更详细

  • dev
    该目录下存放的是设备文件,设备文件是Linux中特有的文件类型。在Linux系统下,以文件的方式访问各种设备,即通过读写某个设备文件操作某个具体硬件。譬如通过"dev/ttySAC0"文件可以操作串口0。(在linux下一切皆文件,就像之前树莓派的串口就是存放在dev下面)

  • lib: 该目录下存放共享库和可加载驱动程序模块。共享库用于启动系统、支持可执行程序的运行。

  • etc: 该目录下存放着各种配置文件,对于PC上的Linux系统,/etc目录下的文件和目录非常多,这些目录文件是可选的,它们依赖于系统中所拥有的应用程序是否需要配置文件。在嵌入式系统中,这些内容可以大为精减。

  • root: 根用户的目录,与此对应,普通用户的目录是/home下的某个子目录。

  • usr: 该目录存放的是共享、只读的程序和数据,/usr目录下的内容可以在多个主机间共享。

  • var: 与/usr目录相反,/var目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件。

  • proc:该是一个空目录,常作为proc文件系统的挂载点,proc文件系统是个虚拟的文件系统,它没有实际的存储设备,里面的文件都是由内核临时生成的,用来表示系统的运行状态,也可以操作其中的文件控制系统。

  • mnt: 用于临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建子目录来临时挂载光盘、硬盘,譬如/mnt/cdram /mnt/hda1 。

  • home: 用户目录,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件

  • opt: 存放的是和内核底层有些关系的东西

  • bin:该目录下存放所有用户都可以使用的、基本的命令,譬如cd,ls,cp等。这些命令在挂载其它文件系统之前就可以使用,所以/bin目录必须和根文件系统在同一个分区中,比如:which ls可以查找ls指令的路径

  • sbin:该目录下存放的是基本的系统命令,它们用于启动系统,修复系统等,与/bin目录相似,在挂接其他文件系统之前就可以使用/sbin,所以/sbin目录必须和根文件系统在同一个分区中

  • boot: 存放的是启动时候的一些数据,包括启动的时候加载的内容、一些命令和命令行的配置等等。

  • tmp: 用于存放临时文件,通常是空目录,一些需要生成临时文件的程序用到的/tmp目录下,所以/tmp目录必须存在并可以访问。

总结:

C51,STM32(裸机) 启动:c直接操控底层寄存器实现相关业务,属于业务流程型的裸机代码
遥控灯 :while(1)
垃圾桶:wemosD1 Loop
恩智浦智能车:stm32

x86 Inte1 windows 启动过程: 电源 —> BIOS —>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值