平台:JZ2440开发板
作者:赵贺
移植linux3.4内核到2440
1. 下载内核源码
https://www.kernel.org/pub/linux/kernel/
2. 交叉环境搭建(只要编译不出错,一般都可以使用,如果出现汇编错误,升级gcc版本即可)
工具下载
最新版下载
在/usr/local/下建立交叉编译器的安装目录arm
sudo mkdir /usr/local/arm
将下载的交叉编译器包解压到/usr/local/arm目录下
sudo tar jxvf cross-4.2.2-eabi.tar.bz2 -C /usr/local/arm/
解压成功后,修改PATH环境变量
sudo vim /etc/profile
export PATH=$PATH:/usr/local/arm/4.2.2-eabi/usr/bin
Special for me:(下面是我配置的方法,由于经常需要更换编译器版本,用软链接指向当前的编译器)
sudo vim /etc/profile
export PATH=$PATH:/usr/local/arm/current_compiler/bin
sudo ln -s 编译器文件夹 /usr/local/arm/current_compiler/
- 更新一下配置文件/etc/profile
source /etc/profile
3.解压内核
tar xvf linux-3.4.tar.bz2
make clean
(每次编译内核前使用 make clean 一种良好的习惯)
4.修改Makefile
vim Makefile
修改
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
为
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
5.make xxx_defconfig(具体使用什么由厂家提供)
make s3c2410_defconfig
(这个目录下可以找到 配置arm的全部的配置文件/linux-3.4/arch/arm/configs)
ps:执行
make s3c2410_defconfig -n
可以现实详细的信息
如果出现下面的错误
make: *** /home/zhaohe/Linux/linux-3.4/arch/arm: Is a directory. Stop.
查看上面的修改在行末是否有多出来的括号
6.make一下查看是否成功
7.支持串口调试
make menuconfig
"System Type--->"
--->"(0)S3C UART to use for low-level messages"
这里我的理解
1,开发板上使用的COM1 这里之所以设置为0 因为计算机里面是以0开始的
2,即便这里设置成其他在命令行中 加入命令 set bootargs console=ttySAC0,115200 依然会使用ttySAC0
8.make uImage
make uImage
CHK include/linux/version.h
CHK include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
Kernel: arch/arm/boot/Image is ready
Kernel: arch/arm/boot/zImage is ready
UIMAGE arch/arm/boot/uImage //这个目录下可以找到uImage文件
Image Name: Linux-3.4.0
Created: Tue Nov 22 17:16:07 2016
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2353088 Bytes = 2297.94 kB = 2.24 MB
Load Address: 0x30108000 //这个地址是由链接文件指定的
Entry Point: 0x30108000
Image arch/arm/boot/uImage is ready
9. 下载内核到开发板子中 并启动
配置环境变量
set bootcmd 'tftp 30000000 uImage;bootm 30000000'