Linux学习内核移植相关笔记第1部分

本文转自:http://www.arm32.com/post/11016.html

内核linux2.6.30.4,NandFlash,串口,yaffs2文件系统移植整个移植,并能够在开发板的NandFlash中运行,以下大部分内容参考了天嵌和友善的资料。

开始时间:2011-03-23晚
本文记录约定:
1、友善手册:就是指,我购买的开发板资料光盘中的相关用户手册:“mini2440-um-20090514.pdf”。(在资料文件夹下有的)
2、天嵌手册:就是指,我从天嵌官方完站下载的天嵌公司的开发板手册,资料光盘中的相关用户手册:“TQ2440开发板使用手册V2.5_20100611.pdf”。(在资料文件夹下有的)
3、天嵌Linux手册:就是指,我从天嵌官方完站下载的天嵌公司的编写出品的“Linux移植_V4.0_20091028.pdf”(在资料文件夹下有的)

4、天嵌Qt手册:就是指,我从天嵌官方完站下载的天嵌公司的编写出品的“天嵌科技出品—Qt程序开发完全手册之24小时超级版本_V2.2_20100606.pdf”(在资料文件夹下有的)

本文详细记录开始:
我的linux记录1:今天是2011-3-22日,今天开始起,完整实践一次linux移植, 记下整个过程记录如下:

1) 安装Fedora 9.0
方法: 安装Fedora 9.0(参考资料文件夹下的友善手册P241-P263),所需要的系统安装文件等资料在移动硬盘中都有,也可以到友善官方网站下载。
2)建立交叉环境,安装linux-gcc-4.3.2.tgz,(在 Linux 平台下,要为开发板编译下面提到的 linux-2.6内核,图形界面 Qtopia,bootloader,还有其他一些应用程序很所有工具,均需要这个arm-linux-gcc-4.3.2编译器编译)
方法:安装交叉编译器 arm-linux-gcc-4.3.2(参考友善手册的P263-P265),编译bootloader、Linux-2.6内核、BusyBox、u-boot等的时候,一定注意arm-linux-gcc的版本。
注意下面提到的命令中文件的位置,因为在移植完毕我对整个文件整理了,但是思路都是没问题的,仅仅是命令中涉及的文件路径需留意更改。
第1步:修改Makefile,
#mkdir MyLinuxKernel
#tar xvjf linux-2.6.30.4.tar.bz2 -C MyLinuxKernel

进入内核源码文件夹
#cd MyLinuxKernel/
#cd linux-2.6.30.4/
修改顶层Makefile文件中的编译器选项。

#gedit Makefile ( 打开Makefile)
将makefile里的:(在193行,在下面的状态栏有提示行号)
    ARCH ?= $(SUBARCH)
    CROSS_COMPILE ?=
修改为:
ARCH ?= arm
    CROSS_COMPILE ?= arm-linux-
第2步:修改时钟
(我的开发板是外接12M 无源晶振,在友善手册的P12有说明)修改内核中平台的时钟频率(mini2440开发板使用12M晶振)。
修改内核源码 “arch/arm/mach- s3c2440/mach-smdk2440.c” 文件的 163 行,
# gedit arch/arm/mach-s3c2440/mach-smdk2440.c ( 可直接打开该文件)
把 16.9344MHz 修改为12MHz
    static void __init smdk2440_map_io(void)

       {

      s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

      s3c24xx_init_clocks(12000000); //修改为 12000000,默认为 16934400

      s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));

        }
第3步:制作配置单(对于配置单的每个选项描述,在资料文件下有个“Linux 2.6.19.x 内核编译配置选项简介(仅额外参考)”做了描述)
#make menuconfig,
然后进入配置菜单界面
这里推荐的一种做法, 就是先调用自带的一个默认配置单, 该配置单在内核源码的 “arch/arm/configs/”

目录下面, 名为:“s3c2410_defconfig”,改配置文件里面选择了几乎所有的和 S3C24XX 系列 CPU 相关的配置选项,我们完全可以在该配置单的基础上进行配置。

在配置菜单中选择选项: “Load an Alternate Configuration File”,然后调用刚刚说到的那个配置文件,

然后进入到如下界面,输入刚刚提到的路径和配置文件名称回车即可:
我的路径是:/home/linux110423/step1/MyLinuxKernel/linux-2.6.30.4/arch/arm/configs/s3c2410_defconfig

然后返回到配置界面,进入到“System Type”选项下的配置单:

然后配置各个平台
如下所示(Linux-2.6.25.8 和 Linux-2.6.30.4 内核的配置单略有不同)

System Type --->

S3C2410 Machines --->

[*] SMDK2410/A9M2410

[ ] IPAQ H1940

[ ] Acer N30

[ ] Simtec Electronics BAST (EB2410ITX)

[ ] NexVision OTOM Board

[ ] AML M5900 Series

[ ] Thorcom VR1000

[ ] QT2410

S3C2412 Machines --->

[ ] SMDK2413

[ ] SMDK2412

[ ] VMSTMS

S3C2440 Machines --->

[ ] Simtec Electronics ANUBIS

[ ] Simtec IM2440D20 (OSIRIS) module

[ ] HP iPAQ rx3715

[*] SMDK2440

[ ] NexVision NEXCODER 2440 Light Board

[*] SMDK2440 with S3C2440 CPU module

S3C2442 Machines --->

[ ] SMDM2440 with S3C2442 CPU module

S3C2443 Machines --->

[ ] SMDK2443

配置完毕这个地方后,退回到最初的配置单。

在配置单中添加自己的信息。
然后配置选项,配置如下(为列出来的均不选择) :

General setup --->

[*] Prompt for development and/or incomplete code/drivers

(-QinziqiangKernel) Local version - append to kernel release

[*] System V IPC

(17) Kernel log buffer size (16 => 64KB, 17 => 128KB)

-*- Namespaces support

Choose SLAB allocator (SLUB (Unqueued Allocator)) --->

说明:上面QinziqiangKernel 部分就是我添加的信息。

选择是否支持 EABI

然后对是否支持 EABI 进行选择,配置如下:

Kernel Features --->

Memory split (3G/1G user/kernel split) --->

[ ] Preemptible Kernel (EXPERIMENTAL)

[*] Use the ARM EABI to compile the kernel

[*] Allow old ABI binaries to run with this kernel (EXPERIMENTAL)

[ ] High Memory Support (EXPERIMENTAL)

Memory model (Flat Memory) --->

[ ] Add LRU list to track non-evictable pages

(4096) Low address space to protect from user allocation

说明:对于上面红色部分的配置选项, 如果您使用的 4.3.3 的编 译 器(也就是支出 EABI 的 编 译 器 ) ,

那么 就选中它;如果您使用 3.4.5 或以下的编译器, 那么就不要选中它,我是用的4.3.2的编译器,我也选中了。

保存配置单

然后选择选项:“Save an Alternate Configuration File”,将其保存为:“.config”文件,因为编译系统时会调用该文件。
注意: 每次执行了# make distclean 命令,或想直接使用制作好的配置文件,建议在 PC 的终端执行:#cp config_Qinziqiang.config,然后再编译或进入配置单进行修改。(不过前提是在配置好配置单后需要保存的文件名为:“config_Qinziqiang”然后再#cp config_Qinziqiang .config即可)

对于具体的配置过程可以参考我们内核中提供的制作好的配置单进行配置,也可以自己摸索着配置(要学会充分里面 Help 选项 ) 。
第4步:修改机器码。

mini2440 使用的 supervivi 的机器码是782,这里需要修改机器码,否则会出现不能启动的情况。机器码保存在内核源码的 “ 78282arch/arm/tools/mach-types” 文件中,
#gedit arch/arm/tools/mach-types 可直接打开该文件,在大概 379 行,把原来的 362   改为782保存即可。

第5步:编译内核 make zImage
内核源码的“arch/arm/boot/下 编译完成后下载内核到开发板启动即可。

下面是我开发板运行后的部分结果(从中可以看到“QinziqiangKernel”):
......

Linux version 2.6.30.4-QinziqiangKernel (root@tom) (gcc version 4.3.2 (Sourcery

G++ Lite 2008q3-72) ) #1 Thu Mar 24 07:19:31 CST 2011

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

CPU: VIVT data cache, VIVT instruction cache

Machine: SMDK2440

......

下接:[Linux学习内核移植相关笔记第2部分

你可能感兴趣的:(Linux内核移植,linux,makefile,编译器,namespaces,allocation,system)