移植linux-2.6.32.2到qq2440
编译该版本内核使用的编译器版本:arm-linux-gcc 3.4.1
1.获取linux-2.6.32.2
2.解压内核
3.切换到刚解压的内核目录下:
cd linux-2.6.32.2
4.修改Makefile
将以下内容修改:
修改前:
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
修改后:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
5.使用以下命令生成.config
make s3c2410_defconfig
6.修改平台输入时钟,由于qq2440的输入时钟为12MHz的无源晶振,故修改arch/arm/mach-s3c2440/mach-smdk2440.c文件的以下内容:
修改前:
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(16934400);
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
修改后:
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(12000000);//修改了原来的数据为12000000
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
7.修改mtd分区信息,修改arch/arm/plat-s3c24xx/common-smdk.c文件的以下内容:
修改前:
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "Boot Agent",
.size = SZ_16K,
.offset = 0,
},
[1] = {
.name = "S3C2410 flash partition 1",
.offset = 0,
.size = SZ_2M,
},
[2] = {
.name = "S3C2410 flash partition 2",
.offset = SZ_4M,
.size = SZ_4M,
},
[3] = {
.name = "S3C2410 flash partition 3",
.offset = SZ_8M,
.size = SZ_2M,
},
[4] = {
.name = "S3C2410 flash partition 4",
.offset = SZ_1M * 10,
.size = SZ_4M,
},
[5] = {
.name = "S3C2410 flash partition 5",
.offset = SZ_1M * 14,
.size = SZ_1M * 10,
},
[6] = {
.name = "S3C2410 flash partition 6",
.offset = SZ_1M * 24,
.size = SZ_1M * 24,
},
[7] = {
.name = "S3C2410 flash partition 7",
.offset = SZ_1M * 48,
.size = SZ_16M,
}
};
修改后:
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "Bootloader",
.size = 0x00000000,
.offset = 0x00030000,
},
[1] = {
.name = "Kernel",
.offset = 0x00050000,
.size = 0x00200000,
},
[2] = {
.name = "Root",
.offset = 0x00250000,
.size = 0x03dac000,
}
};
8.修改s3c2440的机器码,修改arch/arm/tools/mach-types文件的内容如下:
修改前:
s3c2440 ARCH_S3C2440 S3C2440 362
修改后:
s3c2440 ARCH_S3C2440 S3C2440 782
9.给内核打yaffs2文件系统的补丁,这样就可以让内核支持yaffs2文件系统
9.1从git仓库获取yaffs2源码,获取源码的命令如下:
git clone git://www.aleph1.co.uk/yaffs2
9.2将内核补丁插入内核,使用如下方法:
a.先进入yaffs2目录下:
cd yaffs2
b.yaffs2目录下有一个脚本patch-ker.sh,那么执行该脚本即可:
./patch-ker.sh ./patch-ker.sh c m ../linux-2.6.32.2
10.内核配置:
使用以下命令进行配置操作:
make menuconfig
需要修改的配置项如下:
10.1[*] Enable loadable module support --->
[*] Forced module loading
[*] Module unloading
10.2System Type --->
S3C2410 Machines --->
[*] SMDK2410/A9M2410 ,该条目下的其他都不选
S3C2440 Machines --->
[*] SMDK2440
[*] SMDK2440 with S3C2440 CPU module,该条目下的其他都不选
其余Machines选项下的条目均不选(不选的有s3c2400,s3c2412,s3c2442,s3c2443)
10.3Boot options --->
noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0
10.4Userspace binary formats --->
[*] Kernel support for ELF binaries,其余选项均不选
10.5File systems --->
[*] Miscellaneous filesystems --->
<*> yaffs2 file system support
[*] Lets yaffs do its own ECC
10.6-*- Native language support --->
<*> Codepage 437 (United States, Canada)
<*> Simplified Chinese charset (CP936, GB2312)
<*> Traditional Chinese charset (Big5)
<*> NLS ISO 8859-1 (Latin 1; Western European Languages)
<*> NLS UTF-8
11.开始编译内核:
make zImage -j5
11.1出错如下:
In file included from fs/yaffs2/yaffs_guts.c:18:
fs/yaffs2/yaffs_endian.h:32: error: parse error before "swap_loff_t"
fs/yaffs2/yaffs_endian.h:32: error: parse error before "lval"
fs/yaffs2/yaffs_endian.h:33: warning: return type defaults to `int'
fs/yaffs2/yaffs_endian.h:33: warning: function declaration isn't a prototype
fs/yaffs2/yaffs_endian.h: In function `swap_loff_t':
fs/yaffs2/yaffs_endian.h:34: error: `lval' undeclared (first use in this function)
fs/yaffs2/yaffs_endian.h:34: error: (Each undeclared identifier is reported only once
fs/yaffs2/yaffs_endian.h:34: error: for each function it appears in.)
fs/yaffs2/yaffs_endian.h:37: error: `Y_LOFF_T' undeclared (first use in this function)
fs/yaffs2/yaffs_endian.h:38: error: parse error before "vall"
fs/yaffs2/yaffs_endian.h:38: warning: statement with no effect
CC fs/proc/uptime.o
make[2]: *** [fs/yaffs2/yaffs_guts.o] 错误 1
make[2]: *** 正在等待未完成的任务....
CC fs/proc/version.o
In file included from fs/yaffs2/yaffs_checkptrw.c:16:
fs/yaffs2/yaffs_endian.h:32: error: parse error before "swap_loff_t"
fs/yaffs2/yaffs_endian.h:32: error: parse error before "lval"
fs/yaffs2/yaffs_endian.h:33: warning: return type defaults to `int'
fs/yaffs2/yaffs_endian.h:33: warning: function declaration isn't a prototype
fs/yaffs2/yaffs_endian.h: In function `swap_loff_t':
fs/yaffs2/yaffs_endian.h:34: error: `lval' undeclared (first use in this function)
fs/yaffs2/yaffs_endian.h:34: error: (Each undeclared identifier is reported only once
fs/yaffs2/yaffs_endian.h:34: error: for each function it appears in.)
fs/yaffs2/yaffs_endian.h:37: error: `Y_LOFF_T' undeclared (first use in this function)
fs/yaffs2/yaffs_endian.h:38: error: parse error before "vall"
fs/yaffs2/yaffs_endian.h:38: warning: statement with no effect
make[2]: *** [fs/yaffs2/yaffs_checkptrw.o] 错误 1
make[1]: *** [fs/yaffs2] 错误 2
make[1]: *** 正在等待未完成的任务....
对策:看来不能使用最新的yaffs2,因此从另一个内核linux-2.35.7将fs/yaffs2文件夹的内容都复制到linux-2.6.32.2/fs/中
移植linux-2.6.32.2到qq2440的更多相关文章
- 查看linux机器是32位还是64位的方法
file /sbin/init 或者 file /bin/ls/sbin/init: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dyna ...
- 如何查看linux系统是32位还是64位
1.#uname -a 如果有x86_64就是64位的,没有就是32位的 这是64位的 # uname -a Linux desktop 2.6.35-23-generic #37-Ubuntu ...
- 查看linux库文件32位还是64位
查看linux库文件32位还是64位 分类: linux2014-09-25 09:46 238人阅读 评论(0) 收藏 举报 objdump -a *.a objdump -a *.so
- 为AM335x移植Linux内核主线代码
/********************************************************************** * 为AM335x移植Linux内核主线代码 * 说明: ...
- linux内核学习之三:linux中的"32位"与"64位"
在通用PC领域,不论是windows还是linux界,我们都会经常听到"32位"与"64位"的说法,类似的还有"x86"与"x86 ...
- 引用 移植Linux到s3c2410上
引用 bsky 的 移植Linux到s3c2410上来源:http://www.embed.com.cn/downcenter/Article/Catalog12/4000.htm 移植Linux到s ...
- linux中的"32位"与"64位"
linux内核学习之三:linux中的"32位"与"64位" 在通用PC领域,不论是windows还是linux界,我们都会经常听到"32位" ...
- 【故障•监听】TNS-12518、TNS-00517和 Linux Error:32:Broken pipe
[故障|监听]TNS-12518.TNS-00517和 Linux Error:32:Broken pipe 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱 ...
- 【Linux】查看所使用的Linux系统是32位还是64 位的方法
查看所使用的Linux系统是32位还是64 位的方法 方法一:getconf LONG_BIT # getconf LONG_BIT 1 1 我的Linux是32位!!! 方法二:arch # arc ...
- Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程
Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程 一:前言 最近手上压了一块米联客的Miz7035,一块xilinx zynq-7000系列的开发板,想着正好学习一下linu ...
随机推荐
- hibernate学习(2)——api详解对象
1 Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...
- 序列化(Serialization)据为JSONP远端请求
Insus.NET前些日子,有分享了一段代码,<使用JSONP跨域请求数据>http://www.cnblogs.com/insus/p/3512271.html 是使用jQuery的Da ...
- iOS开发小技巧
1. 解析详情页(是webView)遇到的3个问题: 1.图片太大,超出屏幕范围 2.怎么在webView上面添加一行文字 3.文字太小 1.解决方法 webView.scalesPageToFit ...
- Class类
package com.imooc.reflect; public class ClassDemo1 { public static void main(String[] args) { //Foo的 ...
- (转)MVC设计模式学习总结
原文 : chenchun的博客 http://www.cnblogs.com/jobscn/archive/2011/11/08/2240725.html -------------------- ...
- Control Flow
1.重写折半查找,使得在循环内部只执行一次测试 传统的非递归式的折半查找的例子中,while循环语句内部共执行了两次测试,其实只要一次就足够(代价是将更多的测试在循环外执行).重写该函数,使得在循环内 ...
- PHP---------去除数组里面值为空或者为空字符串的元素
array_filter(array('a'=>'','',null,'b'=>3),function($val){ if($val===''||$val===null){ ...
- 【转】[退役]纪念我的ACM——headacher@XDU
转自:http://hi.baidu.com/headacher/item/5a2ce1d50609091b20e25022 退役了,是时候总结一下我ACM的生涯了.虽然很舍不得,但这段回忆很值得纪念 ...
- REPL LOG
using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressi ...
- Cutterman 切图神器,虽然还没用过,先 mark 一下好了
在官网上找了半天也没发现下载链接,注册账号用无法激活,还是等等再试吧.