uboot和linux内核 的简单及介绍

uboot & Linux内核

uboot是一种通用的引导加载程序,它可以用于多种嵌入式系统,支持多种操作系统,如Linux, Android, NetBSD等。

uboot的主要作用是将操作系统内核从存储设备(如Flash, SD卡等)==> 加载到内存中,并执行 内核代码。

1.1 为什么需要用uboot?

  • 因为芯片内部的资源是有限的(RAM&ROM太少了),需要借助外部的裸机程序(uboot)

==>内存初始化 ==> 引导(加载)linux内核

  • boot/ 放启动代码

  • XIP设备是指一种可以直接在存储器中执行程序代码的设备,即芯片内执行

1、uboot

1.2 uboot启动过程

U-Boot的启动流程通常可以分为以下几个步骤:

硬件初始化 ==> 加载引导程序 ==> 引导加载内核镜像 ==> 设置内核启动参数 ==> 启动操作系统

在整个启动流程中,U-Boot扮演着关键的角色,负责初始化硬件、加载引导程序和内核映像,并设置必要的启动参数,从而顺利地启动操作系统。

  1. 硬件初始化:设置设备的基本硬件参数,如时钟和存储控制器。
  2. 加载引导程序:从预设的存储介质(如闪存、SD卡)中加载引导程序。
  3. 引导加载内核镜像:加载操作系统内核到内存中。
  4. 设置内核启动参数:设置内核启动所需的参数,如内存布局、命令行参数。
  5. 启动操作系统:跳转到内核入口点,传递参数启动操作系统。

2、内核编译

2.1 linux操作系统框架

在这里插入图片描述

2.2 linux内核的主要功能

Linux内核的主要功能:进程管理、内存管理、驱动、系统调用

arch/
x86/arm/
boot/lib/mm/include/
启动代码库函数内存管理头文件
  • Linux的目录结构

  • test@test:~/orangepi-build/kernel/orange-pi-5.16-sunxi64$ ls
    arch include mm scripts
    block init modules.builtin security
    certs ipc modules.builtin.modinfo sound
    COPYING Kbuild modules-only.symvers System.map
    CREDITS Kconfig modules.order tools
    crypto kernel Module.symvers usr
    Documentation lib net virt
    drivers LICENSES README vmlinux
    export.txt MAINTAINERS README.md vmlinux.o
    fs Makefile samples vmlinux.symvers.
    
    
目录
arch/这个目录包含了不同架构处理器的代码,如x86,arm,mips等,。每个架构都有自己的子目 录,如arch/x86/,arch/arm/等。
block/这个目录包含了块设备的代码,如硬盘,光驱等。block/目录中主要包含了块设备的基本框 架和I/O调度算法,以及一些通用的块设备驱动
crypto/这个目录包含了加密算法的代码,如AES,SHA1,MD5等
drivers/这个目录包含了设备驱动程序的代码,如键盘,鼠标,网卡,声卡,摄像头等。drivers/目 录中的代码按照设备的类别进行分类,如char/,block/,input/,i2c/,spi/,pci/,usb/等
fs/这个目录包含了文件系统的代码,如ext4,fat,ntfs,nfs,cifs等
include/这个目录包含了内核所需的头文件,如linux/,asm/,uapi/等。
init/这个目录包含了内核初始化的代码,如main.c,version.c,do_mounts.c等。
ipc/这个目录包含了进程间通信的代码,如sem.c,msg.c,shm.c等。进程间通信是指在不同的进程 之间传递数据和信号的方法,它们可以让进程之间实现协作和同步。ipc/目录中的代码实现了一些常用的 进程间通信机制,如信号量,消息队列,共享内存等
kernel/这个目录包含了内核的核心代码,如sched/,irq/,time/,fork.c,exit.c,signal.c等。 kernel/目录中的代码实现了一些内核的基本功能和服务,如进程调度,中断处理,时间管理,进程创 建,进程终止,信号处理等
lib/这个目录包含了内核需要引用的一些库函数的代码,如string.c,vsprintf.c,crc32.c等
mm/这个目录包含了内存管理的代码
net/这个目录包含了网络协议的代码,和网卡驱动不相关代码
scripts/这个目录包含了内核编译所需的一些脚本,如Makefile,Kconfig,checkpatch.pl等
tools/这个目录包含了一些和内核交互的工具,如perf/,ftrace/,cpupower/,objtool/等。工具是 用于分析和调试内核的程序,它们可以让内核的性能和稳定性更加优化和提高

2.3 Linux根文件系统

根文件系统也叫roofs,Linux 根文件系统是指整个文件系统的最顶层,以 “/” 来表示。它是内核启动时 所挂载的第一个文件系统,包含了系统运行所必需的目录和文件:

根文件
/bin下存放着系统需要的可执行文件比如ls、mv、cp等命令,现在新根文件系统的像ubuntu等 debian系的rootfs, 基本都是软链接到/usr/bin目录下
/dev下面存放着的文件都与设备有关,此目录下的文件都是设备文件。
/etc存放Linux下所必须的库文件
/mnt临时挂载目录,可以在从目录下创建空的子目录
/proc、sysLinux虚拟文件系统,由内核生成各类节点
/sbin一般软链到/usr/sbin下,一般存放一些root权限才能执行的命令
/lib软链接到/usr/lib目录,用于存放库文件
/usr存放lib bin sbin目录, 另外的share目录里面存放的是共享、只读的程序和数据
/tmp存放临时文件或目录
/root系统管理员(root)的主文件夹,即是根用户的目录,与此对应,普通用户的目录 是/home下的某个子目录。
/var与/usr目录相反,/var目录中存放可变的数据,比如log文件\临时文件等。
/home系统默认的**用户文件夹,**它是可选的,对于每个普通用户,在/home目录下都有一个 以用户名命名的子目录,里面存放用户相关的配置文件。


欢迎大家一起交流讨论!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值