1.下载内核原码
2.查看顶层目录的Makefile,配置交叉编译工具
3.清除之前的配置make distclean
4.拷贝配置文件到顶层目录,生成.config文件
5.生成make menuconfig
6.配置开发板启动数据,网卡启动,文件系统等
7.编译,并生成uImage或者zImage
=========================================================================
宏观上可分为四步:
1.搭建交叉开发环境
交叉环境是指我们开发的环境是在PC上,但是目标是运行在嵌入式设备上(板子上),而嵌入式系统的系统和指令集和我们PC上不一样;并且没法直接在没有系统的开发板上开发,在速度更快的PC上开发更好更快。
所谓“环境”指的是硬件上:开发机,目标机,和二者的链接介质:串口,USB线,网线;软件上:如果用串口---需要串口调试助手,用usb---需要usb驱动,用网线---需要tftp(下载)和nfs(网络共享); 还需要交叉编译链(指交叉编译的一系列环境搭建)---即下载并配置crosstools -ng脚本工具
2.Bootloader的选择和移植
Bootloader是在操作系统内核之前运行的一段小程序,创造环境,对软硬件进行初始化,引导操作系统启动内核(即把内核加载到内存SDRAM里面运行)
Bootloader工作方式:
启动加载---Bootloader将系统从flash加载到SDRAM,整个过程自动
下载---通过某些通信手段,将内核或者根文件系统的镜像下载到板子的SDRAM里面运行,Bootloader本身提供接口命令,给用户完成自己想要的操作,这种一般用于测试和开发
3.Kernel的配置,编译和移植
p1---将下载好的文件linux-3.14.tar.bz2拷贝到主目录下解压
p2---修改顶层目录下的makefile(修改平台和交叉编译器):
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
修改以上代码为:
ARCH ?= arm ---->体系架构是arm架构
CROSS_COMPILE ?= arm-cortex_a8-linux-gnueabi- ---->交叉编译器是arm-cortex_a8平台的
注意:这两个变量值会直接影响顶层Makefile的编译行为,即选择编译哪些代码,用什么编译器进行编译。 p3---拷贝标准版配置文件,获取我们开发板的配置信息。
$ cp arch/arm/configs/s5pc100_defconfig .config
p4---配置内核
$make menuconfig
p5---编译内核
$make zImage
p6---通过tftp测试内核
setenv bootcmd tftp 20008000(内存地址) zImage\;go 20008000
setenv bootargs nfs nfsroot=192.168.1.199(虚拟机的ip):/source/rootfs ip=192.168.1.200(开发板的ip) init=/linuxrc(第一个要启动的用户进程) ttySAC0,115200(设置中断为串口1,波特率为:115200)
4.各种设备的移植包括存储设备和通信设备
5.根文件系统的移植