2.6.14在海成的arm开发板移植成功

更新时间:2023-05-30 05:19:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

arm开发

linux2.6.14在海成的arm开发板移植成功(小寿原创)




##########################################################
一、配置编译环境:
(我们采用linux2.6.14内核,交叉编译器3.4.1)
#########################################################
1.解压linux-2.6.14的内核;
在解压的文件夹根目录执行#make menuconfig 结果没有出现s3c2410的选项,原因很简单是因为没有指定平台体系;
我们可以打开Makefile,找到ARCH与CROSS_COMPILE,修改为
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
现在我们再执行#make menuconfig 或者 #make xconfig 可以看到system type:-> arm system type:->samsung s3c2410 哈哈!看到了!(搞定)
下一步我准备设定一下交叉编译环境,主要是系统的搜索路径(可以搜索我们的arm-linux-gcc、、、),解决中。。。。。。。。。。。。。。。

哈哈;搜索路径也包括进去了!
是这个样子做得!!!
首先是将我们交叉编译链解压到 /usr/local/arm/3.4.1;
接着我们 将交叉编译工具路径和内核路径加入环境变量
#vi ~/.bashrc
export KERNEL=/home/admin/linux-2.6.14.1
export PATH=/usr/local/arm/3.4.1/bin:$PATH
保存文件,然后执行
#exit
#su
接着我们可以测试一下;执行
#arm-linux-gcc -v
我们可以看到:
Reading specs from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/specs
Configured with: /work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/usr/local/arm/3.4.1 --with-headers=/usr/local/arm/3.4.1/arm-linux/include --with-local-prefix=/usr/local/arm/3.4.1/arm-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.1
我们还可以看看我们的系统的gcc的版本;
执行#gcc -v
可以看到:
gcc version 3.4.4 20050721 (Red Hat 3.4.4-1mgc)
我们还可以看看
#echo $kernel
看到:/home/admin/linux-2.6.14.1
证明了我们设定的搜索路径已经生效了!
#######################################################################
二、交叉编译内核
#######################################################################
一、设置flash分区
指明分区信息
在arch/arm/machs3c2410/devs.c文件中:
$kate arch/arm/machs3c2410/devs.c
添加如下内容:
#include <linux/mtd/partitions.h>
#include <linux/mtd/nand.h>
#include <asm/arch/nand.h>
...
/* NAND Controller */
1.建立Nand Flash分区表
/* 一个Nand Flash总共64MB, 按如下大小进行分区 */
static struct mtd_partition partition_info[] ={
{/*xxMB*/
name: " vivi",
size: 0x00020000,
offset: 0x0,
},{ /*xxMB */
name: "param ",
size: 0x00010000,
offset: 0x00020000,
},{ /*xxMB */
name: " kernel",
size: 0x00140000,

arm开发


offset: 0x00030000,
},{ /*xxMB */
name: " root",
size: 0x00300000,
offset: 0x00170000,
}
};
name: 代表分区名字
size: 代表flash分区大小(单位:字节)
offset: 代表flash分区的起始地址(相对于0x0的偏移)
目标板计划分4个区,分别存放vivi,param, kernel, root以及以便以后扩展使用的用户文件系统空间(以后再添加)。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
注意: bootloader(vivi)中的分区必须和此处分区以致!
如何实现:1.我们可以修改vivi的源代码(vivi/arch/s3c2410/smdk.c)中的分区信息。
2.在超级终端中启动vivi再进行分区,如:part add kernel <offset> < size > <flag>
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
2. 加入Nand Flash分区
struct s3c2410_nand_set nandset ={
nr_partitions: 4, /* the number of partitions */
partitions: partition_info, /* partition table */
};
nr_partitions: 指明partition_info中定义的分区数目
partitions: 分区信息表
3. 建立Nand Flash芯片支持
struct s3c2410_platform_nand xiaoshou_nand={
tacls:0,
twrph0:30,
twrph1:0,
sets: &nandset,
nr_sets: 1,
};
tacls, twrph0, twrph1的意思见S3C2410手册的63,
这3个值最后会被设置到NFCONF中,见S3C2410手册66.
sets: 支持的分区集
nr_set:分区集的个数
4. 加入Nand Flash芯片支持到Nand Flash驱动
另外,还要修改此文件中的s3c_device_nand结构体变量,添加对dev成员的赋值
struct platform_device s3c_device_nand = {
.name = "s3c2410nand",
/* Device name */
. id = 1,
/* Device ID */
.num_resources = ARRAY_SIZE(s3c_nand_resource),
.resource = s3c_nand_resource, /* Nand Flash Controller Registers */
/* Add the Nand Flash device */
//########add here#########
.dev = {
.platform_data = &xiaoshou_nand
}
//#######add end###########
};
name: 设备名称
id: 有效设备编号,如果只有唯一的一个设备为1,
有多个设备从0开始计数.
num_resource: 有几个寄存器区
resource: 寄存器区数组首地址
dev: 支持的Nand Flash设备
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
注意:这四处添加的内容在文件里的位置必须是从上到下依次的,
否则编译的时候会提示你说,变量没声明
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
二、指定启动时初始化
kernel启动时依据我们对分区的设置进行初始配置
修改arch/arm/machs3c2410/machsmdk2410.c文件
#kate arch/arm/machs3c2410/machsmdk2410.c
修改smdk2410_devices[].指明初始化时包括我们在前面所设置的flash分区信息
static struct platform_device *smdk2410_devices[] __initdata = {
&s3c_device_usb,
&s3c_
device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
/* 添加如下语句即可 */
&s3c_device_nand,
};
保存,退出。
三、 禁止Flash ECC

arm开发

校验
我们的内核都是通过UBOOT写到Nand Flash的, UBOOT通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410中Nand Flash控制器产生的. 所以, 我们在这里选择禁止内核ECC校验.
修改drivers/mtd/nand/s3c2410.c 文件:
#kate drivers/mtd/nand/s3c2410.c
找到s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:
chip->eccmode = NAND_ECC_NONE;
保存,退出。
OK.我们的关于flash分区的设置全部完工.
################################################################################## edit /include/linux/mtd/partitions.h
partitions.h文件的最前面加上#include <linux/list.h>
##################################################################################

四、配置内核
1. 支持启动时挂载devfs
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
我使用的2.6.14内核中已经配置好这部分了,所以不用做,
如果没有可以按照下面的步骤进行。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
为了我们的内核支持devfs以及在启动时并在/sbin/init运行之前能自动挂载/dev为devfs文件系统,修改
fs/Kconfig文件
# vi fs/Kconfig
找到menu "Pseudo filesystems"
添加如下语句:
config DEVFS_FS
bool "/dev file system support (OBSOLETE)"
default y
config DEVFS_MOUNT
bool "Automatically mount at boot"
default y
depends on DEVFS_FS
2.配置内核产生.config文件
$cp arch/arm/configs/smdk2410_defconfig .config
$make menuconfig
在smdk2410_defconfig基础上,我所增删的内核配置项如下:
Loadable module support >
[*] Enable loadable module support
[*] Automatic kernel module loading
System Type >
[*] S3C2410 DMA support
Boot options >
Default kernel command string:
noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200
#说明:mtdblock2代表我的第3个flash分区,它是我的rootfs
# console=ttySAC0,115200使kernel启动期间的信息全部输出到串口0上.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
注意:此处我添加的启动命令是:
console=ttySCA0 root=/dev/nfs nfsroot=192.168.0.1:/dm2410/root ip=192.168.0.230:192.168.0.1:192.168.0.1:255.255.255.0::eth0:off init=linuxrc
因为我要通过NFS来mount根文件系统。(不过因为还没移植网卡驱动所以不能启动,等下一节移植完网卡就可以了,哈哈)!
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 2.6内核对于串口的命名改为ttySAC0,但这不影响用户空间的串口编程。
# 用户空间的串口编程针对的仍是/dev/ttyS0等
Floating point emulation >
[*] NWFPE math emulation
This is necessary to run
most binaries!!!
#接下来要做的是对内核MTD子系统的设置
Device Drivers >
Memory Technology Devices (MTD) >
[*] MTD partitioning support
#支持MTD分区,这样我们在

arm开发

前面设置的分区才有意义
[*] Command line partition table parsing
#支持从命令行设置flash分区信息,灵活
RAM/ROM/Flash chip drivers >
<*> Detect flash chips by Common Flash
Interface (CFI) probe
<*> Detect nonCFI
AMD/JEDECcompatible
flash chips
<*> Support for Intel/Sharp flash chips
<*> Support for AMD/Fujitsu flash chips
<*> Support for ROM chips in bus mapping
NAND Flash Device Drivers >
<*> NAND Device Support
<*> NAND Flash support for S3C2410/S3C2440 SoC
Character devices >
[*] Nonstandard
serial port support
[*] S3C2410 RTC Driver
#接下来做的是针对文件系统的设置,不过已经在nfs服务搭建的时候建好了根文件系统了,/dm2410/root
File systems >
<> Second extended fs support #去除对ext2的支持
Pseudo filesystems >
[*] /proc file system support
[*] Virtual memory file system support (former shm fs)
[*] /dev file system support (OBSOLETE)
[*] Automatically mount at boot (NEW)
#这里会看到我们前先修改fs/Kconfig的成果,devfs已经被支持上了
Miscellaneous filesystems >
<*> Compressed ROM file system support (cramfs)
#支持cramfs
Network File Systems >
<*> NFS file system support
保存退出,产生.config文件.
.config文件能从提供的2.4.14.1的内核包中找到,文件名为config.back.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
注意:很重要的一件事情!
必须将 arch/arm/kernel/setup.c 文件中的parse_tag_cmdline()函数中的strlcpy()函数注释掉,这样才能使用我们CONFIG_CMDLINE中定义的
console=ttySCA0 root=/dev/nfs nfsroot=192.168.0.1:/dm2410/root ip=192.168.0.230:192.168.0.1:192.168.0.1:255.255.255.0::eth0:off init=linuxrc
否则:将不会启动内核!!!!!!!哈哈!!
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
注意:此时如果编译的话应该可以在开发板上启动内核,不过不能启动网卡,因为还没移植,哈哈!
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
amp;&&&&&&&&&&&&&&&&&&&&&&&&&&&


本文来源:https://www.bwwdw.com/article/5274.html

Top