系统移植----系统移植步骤
来源:互联网 发布:浙江工业大学内网软件 编辑:程序博客网 时间:2024/04/29 13:41
1、源码
2、解压
# tar xvf linux-3.9.8.tar.xz
3、指定交叉编译工具链:两种方法:A B
A、修改源码顶层下的Makeifle
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
改为:
ARCH ?= arm
CROSS_COMPILE ?= /opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux- (目录和编译工具看自己的编译工具及路径)
B、编译时手工指定
# make ARCH=armCROSS_COMPILE=/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-
4、使用缺省配置
(1)拷贝缺省配置到源码顶层目录下 (将s5pc100_defconfig拷贝到linux-3.9.8目录下)
arch/arm/configs/s5pc100_defconfig --->/
(2)编译系统使用的配置文件是.config
A、
#mv s5pc100_defconfig .config
B、
#make s5pc100_defconfig (会生成 . 文件,此文件为隐藏文件 ll 可查看)
5、编译
# make zImage (编译生成内核,u-boot本身只能加载uImage格式的,华清修改后可以加载zImage 压缩的)
# make
/*************************************/
将第五步生成部内核下载到板子上
6、运行验证
QA:
错误信息:
Uncompressing Linux... done, booting thekernel.
Warning: Neither atags nor dtb found
错误原因:
U-BOOT传递给内核启动参数错误
A、U-BOOT设置的内核启动参数就有问题"console"
B、格式问题(两者格式)
解决办法:
首先通过命令进入内核配置菜单make muneconfig
A、内核里面写死启动参数
Boot options --->
(...)Default kernel command string
Kernel command line type (Always use thedefault kernel command string) --->
B、使用老格式传递内核启动参数
Boot options --->
[*] Provide old way to pass kernel parameters
===============================================================================
1、编译系统工作原理
make---> 当在终端输入make命令时,会去读取Makefile配置规则并解释执行执行
A、Makefile语法解释
B、shell
C、编译器
源码底层/Makefile (在linux-3.9.8下的makefile, 当运行make命令时,在顶层的makefile文件会去读取每个目录下的makefile文件并执行里面的代码,当执行了会退出目录)
--->遍历每个源码目录(或配置指定的源码目录)Makefile
定制要编译对象
--->回到顶层目录的Makeifle执行编译
2、配置规则
Kconfig ---> (每个源码目录下)提供选项
.config --->(源码顶层目录下)保存选择结果
Makefile---> (每个源码目录下)根据.config中的内容来告知编译系统如何编译
Kconfig语法
config CPU_S5PC100
bool
selectS5P_EXT_INT
selectSAMSUNG_DMADEV
help
Enable S5PC100 CPU support
//对上面的程序进行解释
config ---> 选配
CPU_S5PC100 --->如果该选项选中则选择结果表示CONFIG_CPU_S5PC100
bool--->选择可能:TRUE选中、FALSE不选
如果后面没有字符串名称,则表示其不会出现在选择软件列表中
select---> 当前选项选中后则select后指定的选项自动被选择
config MACH_SMDKC100
bool"SMDKC100"
selectCPU_S5PC100
...
help
Machine support for the Samsung SMDKC100
---------------------------------------------------------
config DM9000
tristate"DM9000 support"
dependson ARM || BLACKFIN || MIPS || COLDFIRE
selectCRC32
selectNET_CORE
selectMII
---help---
Support for DM9000 chipset.
To compile this driver as a module, choose Mhere. The module
will be called dm9000.
tristate ---> 选中并编译进内核、不选、选中并编译成模块
depends ---> 其后的选项必须先选中,这个选项才能出现被选择
这种选择组件进内核编译的形式和VxWorks下组件管理器去选择添加功能一样,选中一个组件,他的Select都会被选中,而depends的会依赖其他组件,就像SSH组件会依赖防火墙组件.
---------------------
当这个配置所在的选项的选中后其自动被选的前提是PCI或ISA或PCMCIA被选中
select HAVE_IDE if PCI || ISA || PCMCIA
------------------------
config ARM_DMA_IOMMU_ALIGNMENT
int"Maximum PAGE_SIZE order of alignment for DMA IOMMU buffers" ---->该选项是一个整型值
range4 9 ---->该选项的范围值
default8 ---->该选项的默认值
help
DMA mapping framework by default aligns allbuffers to the smallest
...
------------------------
config STACKTRACE_SUPPORT
bool --->该选项可以选中或不选,且不会出现在选择列表中
defaulty ---->表示缺省情况是选中
------------------------
if ARCH_S5PC100 --->如果ARCH_S5PC100选项选中了则,在endif范围内的选项才会被选
config CPU_S5PC100
bool
selectS5P_EXT_INT
selectSAMSUNG_DMADEV
help
Enable S5PC100 CPU support
....
endif
----------------------------
menu "Boot options" ----> menu表示该选项是不可选的菜单,其后是在选择列表的菜单名
config USE_OF
bool"Flattened Device Tree support"
selectIRQ_DOMAIN
selectOF
selectOF_EARLY_FLATTREE
help
Include support for flattened device treemachine descriptions.
....
endmenu ----> menu菜单结束
menuconfig MODULES ---> menuconfig表示MODULE是一个可选菜单,其选中后是CONFIG_MODULES
bool"Enable loadable module support"
help
Kernel modules are small pieces of compiledcode which can
be inserted in the running kernel, ratherthan being
if MODULES
...
endif # MODULES
...
----------------------------------
source "init/Kconfig" --->source表示加载其后字符串中指定的Kconfig
----------------------------------
choice --->表示选择列表
prompt"Default I/O scheduler"
defaultDEFAULT_CFQ
help
Select the I/O scheduler which will be usedby default for all
block devices.
configDEFAULT_DEADLINE
bool "Deadline" ifIOSCHED_DEADLINE=y
configDEFAULT_CFQ
bool "CFQ" if IOSCHED_CFQ=y
configDEFAULT_NOOP
bool "No-op"
endchoice
==================================================
.config选择结果
CONFIG_选项名=y 编译进内核
CONFIG_选项名=m 编译成内核模块
CONFIG_选项名=... 参数
==================================================
Makeifle
obj-y += xxx.o表示对应目录下的xxx.c要被编译进内核
obj-m += xxx.o表示对应目录下的xxx.c要被编译成模块
obj-$(CONFIG_选项名) += xxx.o表示对应目录下的xxx.c要被编译进内核(当CONFIG_选项名=y时)
xxx.o表示对应目录下的xxx.c要被编译成模块(当CONFIG_选项名=m时)
内核启动参数:init/linuxrc 第一个运行的程序,
交换分区:
系统会将一部分程序放在内存上运行,运行完后把当前数据放到一个地方保存(这个地方叫交换分区),然后将另外的程序搬上内存,所以较小的内存可以运行较大的数据。
- 系统移植----系统移植步骤
- Android系统移植之arm移植步骤
- 嵌入式系统平台移植步骤
- 系统移植步骤详细说明
- 系统移植的四大步骤
- 系统移植的四大步骤
- 系统移植的四大步骤
- 嵌入式系统移植步骤详解
- 系统移植的四大步骤
- 【系统移植】U_BOOT移植
- 系统移植-uboot移植
- 系统移植-内核移植
- 系统移植-驱动移植
- 系统移植-文件系统移植
- arm Linux系统移植步骤-s3c2410
- 移植ANDROID系统到MINI2440的步骤
- S3C2440 Linux 系统 --- 移植步骤记录
- Openssh移植到Android系统的步骤
- [python]mysql数据缓存到redis中 取出时候编码问题
- C++调用C函数
- 【大地幼教】大地幼教机构与你一起分享幼儿园的快乐点滴
- POJ3176_Cow Bowling【数塔DP】
- linux下查看本地程序占用的端口
- 系统移植----系统移植步骤
- 提取plist文件中的单图或分解plist大图为小图
- 浅谈HTTP中Get与Post的区别
- GraphicsMagick 安装后不支持jpg格式图片的解决办法
- FZU - 2110 Star(几何)
- 开始写点东西
- UIView在gdb或lldb下查看所有子view及层级
- 在Delphi下 IEEE32位浮点数到十进制Integer的相关转换和处理
- 系统移植步骤详细说明