【kernel移植】内核相关问题汇总

一、linux内核源码目录结构

在这里插入图片描述
列举了一些重要的如下:

文件名作用
Kbuildlinux内核特有的内核编译体系需要用到的文件。
Makefile这个是linux内核的总makefile。
文件夹作用
archarch是architecture的缩写,意思是架构。包含不同架构的子文件夹
blocklock目录下放的是一些linux存储体系中关于块设备管理的代码
crypto一些各种常见的加密算法的C语言代码实现。譬如crc32、md5、sha1等。
Documentation文档目录。
drivers驱动目录。
firmware固件。
fsfile system,文件系统,里面列出了linux支持的各种文件系统的实现
include头文件目录,公共的(各种CPU架构共用的)头文件都在这里。而每种CPU架构特有的一些头文件在arch/arm/include目录及其子目录下。
initlinux内核启动时初始化内核的代码。start_kernel() 就位于init/main.c 文件中。
ipcinter process commuication,进程间通信,里面都是linux支持的IPC的代码实现。
kernel内核最核心的部分,包括进程调度、定时器等,而和平台相关的一部分代码放在arch/*/kernel 目录下。
lib一些公用的有用的库函数,例如printk等。
mmmemory management,内存管理相关实现代码。
net络相关的代码,譬如TCP/IP协议栈。
scripts这个目录下全部是脚本文件,这些脚本文件不是linux内核工作时使用的,而是用来辅助对linux内核进行配置编译生产的。

特别关注:
arch/arm目录下的一个mach-xx目录就表示一类machine的定义,这类machine的共同点是都用xx这个cpu来做主芯片。(譬如mach-s5pv210这个文件夹里面都是s5pv210这个主芯片的开发板machine);mach-xx目录里面的一个mach-yy.c文件中定义了一个开发板(一个开发板对应一个机器码),这个是可以被扩展的。
arch/arm目录下的plat(plat是platform的缩写,含义是平台)可以理解为SoC,也就是说这个plat目录下都是SoC里面的一些硬件(内部外设)相关的一些代码。

二、内核的配置过程

1、配置的关键(最终目的)是得到.config文件;
2、make xx_defconfig和make menuconfig相配合。即,首先make xxx_defconfig解决大部分的配置项,接下来就是通过make menuconfig,对个别不同的、针对我们的开发板进行细节调整;
3、make xx_defconfig到底做了什么?
(1)make x210ii_qt_defconfig其实相当于:cp arch/arm/configs/x210ii_qt_defconfig .config;
(2)arch/arm/configs目录下的这么多个xxx_defconfig哪里来的?其实这些文件都是别人配置好适合一定的开发板的.config文件后保存过去的。譬如说我们用S5PV210这个SoC,针对这个SoC的开发板的最初配置肯定是三星的工程师去做的。

三、menuconfig的工作原理

1、menuconfig本身是需要由一套代码支持(scripts\kconfig\lxdialog目录下的一些c文件);
2、Kconfig提供了menuconfig显示的菜单内容。menuconfig中显示的菜单目录结构和源码目录中的Kconfig的目录结构是一样的;
3、.config是menuconfig中配置项的选择结果。menuconfig打开时,会读取.config文件;menuconfig保存时,会写入.config文件;

四、cmdline常用参数解析

cmdline常用参数

五、MACHINE_START宏

MACHINE_START与MACHINE_END

六、根文件系统简介

一套linux体系,只有内核本身是不能工作的,必须要rootfs(rootfs上的etc目录下的配置文件,/bin、/sbin等目录下的shell命令,/lib目录下的库文件等)相配合才能工作,可以认为:发行版=内核+rootfs。

1、根文件系统的实质是什么
1)根文件系统是特殊用途的文件系统,实质是文件系统;
2)根文件系统也必须属于某种文件系统格式(rootfstype=xxx,嵌入式中常见的有ext2、ext3、jffs2等);
3)文件系统的作用:
存储设备(块设备,像硬盘、flash等)是分块(扇区)的,物理上底层去访问存储设备时是通过扇区号来访问的。这就会造成一下几种麻烦:一、访问文件要通过扇区号+占用扇区个数去找到文件,文件太多无法记录;二、文件大小增加时,若后面连续的扇区被占用,就必须找到其他空闲的扇区存放多出来的部分,这样一个文件就碎片化了,很难管理;
而文件系统(是一套代码、软件)功能就是对存储设备的扇区进行管理,将这些扇区的访问变成了对目录+文件名的访问(文件系统会将这个目录+文件名转换成对扇区号的访问)。

2、根文件系统包含哪些内容
1)最重要的是 /linuxrc

  • 这个/linuxrc是应用层的,用arm-linux-gcc编译链接的(没法动态连接,一般都是静态连接的),且在开发板当前内核系统下是可执行的;
  • /linuxrc执行时引出用户界面(调用),最终会给用户一个操作界面(也许是cmdline,也许是GUI),以及后续其他应用进程;
  • /linuxrc负责系统启动后的应用层的配置(一般叫运行时配置,英文简写etc);
  • /linuxrc在嵌入式linux中一般就是busybox:
    一、busybox是一个C语言项目,可以被编译成不同平台下的应用程序(就是专门开发的init进程应用程序,就是linuxrc);
    二、busybox为当前系统提供了一整套的shell命令程序集(如vi、cd、mkdir、ls等);

2)对于嵌入式,最小的根文件系统,必须有的是:

目录说明
dev存放设备的文件。因为linux中,一切皆文件,因此一个硬件设备也被虚拟化成一个设备文件来访问。在/dev/xxx就表示一个硬件设备,要操作这个硬件时就open打开这个设备文件,然后read/write/ioctl操作这个设备,最后close关闭这个设备。
sys里面是空的,但是必须有。
proc里面是空的,但是必须有。
usr系统的用户所有的一些文件的存放地。里面的内容,busybox安装的时候会自动生成。
etc目录中的所有文件都是运行时配置文件。这里面的配置文件会直接或者间接的被/linuxrc所调用执行,完成操作系统的运行时配置。该目录是制作rootfs的关键。
lib存放当前linux中的动态和静态链接库。

3)etc目录下的配置文件,参见:【kernel移植】根文件系统制作:busybox与etc目录的移植

七、设备树传参

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值