我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

git:版本管理工具

源代码用C语言和汇编实现

2、Linux内核支持多种硬件架构平台

3. Linux内核采用模块化方式编写,具有分层的方式。

4. Linux内核是使用C和汇编代码实现的。

内核中最好不要使用C++

5、Linux内核具有良好的移植和剪裁特性

通过图形界面的配置方法可以完成裁剪

2. 获取linux内核源码

1. linux官方获取

2.从芯片厂家获取

3.从开发板厂家获取

4、公司高管获得

由于三星没有将S5p6818芯片硬件支持开源到linux内核官方
本次实验不使用linux内核官方的源码。
本次使用使用:kernel-3.4.39-ok.tar.bz2

3.Linux内核版本命名方法

主版本号.次版本号.修订号

主版本号:内核源码有较大的改动才会更新主版本号
次版本号:修订版本号用完升级次版本号
	偶数:稳定版
	奇数:测试版
修订版本号:内核代码只要有更新就会修改修订版本号

4.Linux内核版本的选择

1、不要选择太新的

2、不要选择太旧的

3.选择稳定版本

5.linux内核的配置与编译

1.将linux内核源码压缩包复制到

1)将内核源码复制到该目录下

2)解压内核源码

tar -vxf -3.4.39-ok.tar.xz

3)进入内核源码目录

光盘-3.4.39

2.分析内核源码的目录结构

平台相关代码:与硬件相关的代码

平台无关代码:与硬件无关的代码

FS

……

3.配置并编译内核

:

clean		 
mrproper	  
distclean	  

:

menuconfig	  - Update current config utilising a menu based program
modules	  - Build all modules
uImage        - U-Boot wrapped zImage
fs6818_defconfig         - Build for fs6818

“赚${}”

一个./。文件通过使用

拱门/$ARCH//${}.

使用“make help”获取所有内容的列表

你的。

4、linux内核详细配置及编译过程

1)修改文件并配置交叉编译工具链

195 ARCH        ?= 
196 CROSS_COMPILE   ?= 

修改为:

195 ARCH        ?= arm
196 CROSS_COMPILE   ?= arm-none-linux-gnueabi-

2)清除内核的中间文件

make(仅在第一次编译源代码时执行一次)

3)配置内核源码支持硬件平台

制作

(仅在第一次编译源代码时执行一次,

如果执行make后,

需要重新执行make)

4)通过图形界面配置(剪切)内核

制作

注:制作

第一次使用make需要安装图形界面工具。

配置前需要安装图形图(make):

sudo apt-get -dev

须藤 apt-get

注意:出现此错误

//mconf

你的太小了,跑不了!

它必须至少为 19 行 x 80 行。

make[1]: *** [] 错误 1

制作:***[]错误2

终端字体太大,减小终端字体

5.编译内核

制作

注:制作

编译过程中可能会出现以下错误:

"" 未找到 - U-Boot 将不会被构建

make[1]: *** [arch/arm/boot/] 错误 1

制作:***[]错误2

错误原因:未找到命令,

根据提示分析,应该是存放在uboot源码目录下。

uboot源代码必须编译后才会有可执行程序。

如何解决问题:

在uboot源码的tools目录下,

复制到/usr/bin目录:

sudo cp ~/uboot源代码目录/tools/ /usr/bin

再次make并重新编译内核即可。

打印以下信息表示编译成功:
Image Name:   Linux-3.4.39-farsight
Created:      Mon Jul 20 15:09:28 2020
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    5391608 Bytes = 5265.24 kB = 5.14 MB
Load Address: 40008000
Entry Point:  40008000
uImage内核镜像在一下目录中:
Image arch/arm/boot/uImage is ready	

6、make{}流程详细分析。

1、打开Linux内核源码顶层目录下的文件,搜索“%”

491 %config: scripts_basic outputmakefile FORCE
492     @mkdir -p include/linux include/config
493     @$(MAKE) $(build)=scripts/kconfig $@   

去掉命令前的@,重新执行make fs6818_defconfig
mkdir -p include/linux include/config
make -f scripts/Makefile.build obj=scripts/kconfig fs6818_defconfig
进入scripts/kconfig目录继续执行make fs6818_defconfig

2、打开/目录下的文件,搜索“”

95 %_defconfig: $(obj)/conf
96     $(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)

去掉命令前的@,重新执行make fs6818_defconfig
scripts/kconfig/conf --defconfig=arch/arm/configs/fs6818_defconfig Kconfig

使用file命令查看conf文件的属性:
作用:根据arch/arm/configs/fs6818_defconfig
	和内核源码顶层目录下的Kconfig文件,
	生成默认的.config配置文件

7.详细分析make过程。

1、打开Linux内核源码顶层目录下的文件,搜索“%”

491 %config: scripts_basic outputmakefile FORCE
492     @mkdir -p include/linux include/config
493     @$(MAKE) $(build)=scripts/kconfig $@   

去掉命令前的@,重新执行make menuconfig
mkdir -p include/linux include/config
make -f scripts/Makefile.build obj=scripts/kconfig menuconfig
进入scripts/kconfig目录继续执行make menuconfig

2、打开/目录下的文件,搜索“”

//obj = scripts/kconfig
20 menuconfig: $(obj)/mconf                                        
21     $< $(Kconfig)

展开后

menuconfig: scripts/kconfig/mconf 
	scripts/kconfig/mconf Kconfig

mconf作用:根据Kconfig文件中的信息,生成图形化界面。
mconf中调用了图形化界面的库:ncurses

3.打开内核源码顶层目录

  5 mainmenu "Linux/$ARCH $KERNELVERSION Kernel Configuration"
  6 
  7 config SRCARCH
  8     string
  9     option env="SRCARCH"
 10 
 11 source "arch/$SRCARCH/Kconfig"

mainmenu: 主菜单 
语法格式:mainmenu "主菜单的名字"
source :引入下一级菜单
语法格式: source "下一级菜单的Kconfig的路径"

4.打开arch/arm/目录下的文件

菜单…:菜单

格式:

菜单“菜单名称”

菜单选项

“下一级菜单”

256 config MMU
257     bool "MMU-based Paged Memory Management Support"
258     default y
259     help                                                          
260       Select if you want MMU-based virtualised addressing space
261       support by paged memory management. If unsure, say 'Y'.

布尔值:菜单选项

语法格式:bool“菜单选项名称”

: 默认

帮助:帮助信息

分析的作用是什么?

/字符//

.:最终在将它们编译到内核中起着决定性的作用,

哪些驱动没有编译进内核

内核工程的管理是通过. 。

打开/char//文件

  1 menu "FS6818 board device driver support" 
  3 config FS_ADC
  4     bool "adc driver for farsight FS6818 all platform"
  5     default y
  6     help
  7     different sensor select different channel
    .... 
	endmenu

打开/char//文件

3 obj-$(CONFIG_FS_ADC) += adc_driver.o

如果=y则对应的驱动被编译到内核镜像中

如果该变量为空,则相应的驱动程序不会被编译到内核映像中。

那么变量是在哪里定义的呢?

在 .file 中进行定义。

要点:.这三个文件之间有什么关系呢?

:进行项目管理,配置和编译内核

。 :存储默认配置信息

对于文件使用,该文件基于

****=y,对应的驱动编译成

#****没有设置,对应的驱动没有编译进

根据足弓/手臂//制作

和文件生成.file

制作时,根据菜单选项的配置

.将被修改

:生成图形界面的菜单选项的配置文件

大多数目录下都有一个文件和多个文件。

在这里插入图片描述

7. 模块化编译内核

以模块化的方式编译内核驱动

布尔:[]

[*]:驱动程序被编译到内核映像中

[ ]: 驱动程序未编译到内核映像中

: 三态

:驱动程序被编译到内核映像中

< >:驱动程序未编译到内核映像中

:驱动程序采用模块化方式编译

使用make命令编译驱动程序,

***.c文件将被编译生成***.ko驱动文件。

当需要使用驱动时,使用命令将驱动加载到内核中:

insmod ***.ko 

当不再需要该驱动程序时,使用 rmmod 命令从内核中卸载该驱动程序:

rmmod ***     # 卸载时只需要指定驱动的名字

使用 lsmod 命令查看所有动态加载的驱动程序。

8. 内核启动过程做了什么?

1> uboot通过tftp命令下载到内存

2> 需要完成自解压

3> 获取CPU的ID号并创建页表。

初始化MMU,完成物理地址到虚拟地址的映射

4> 清除BSS段

5> 完成大部分硬件的初始化,进一步初始化硬件

内存、时钟、串口、EMMC、nfs客户端……

5> 从u-boot环境变量的内存分区获取参数,

根据参数决定根文件系统的挂载位置。

6> 挂载根文件系统,

7> 执行根文件系统中的1号进程,程序

8> 本开发板的Linux系统已启动成功。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/7785.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线