1. 解压linux-2.6.34.tar.gz源码包:

源码下载地址:https://www.kernel.org/pub/linux/kernel/v2.6/
   也可以在linux下,输入命令# wget  https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.1.tar.gz

tar zxvf linux-2.6.34.1.tar.gz

编译内核要用uImage命令,如果不支持uImage需要先安装uImage制作工具:apt-get install uboot-mkimage

2. 进入linux根目录,修改Makefile文件:

$cd linux

$vim Makefile

将第191和第192行改为如下配置

191 ARCH            ?= arm
    192 CROSS_COMPILE   ?=arm-linux-

3. 修改时钟设置:

$vim arch/arm/mach-s3c2440/mach-smdk2440.c

将第163行改为:

163         s3c24xx_init_clocks(12000000);

4.  修改内核的机器码,该机器码要与u-boot中的机器码一致,否则开发板内核无法启动,u-boot的机器码存放在u-boot/arch/arm/include/asm/mach-types.h

内核的机器码存放在arch/armtool/mach-types文件中。

$vim arch/arm/tools/mach-types

5.  修改nand flash分区表:

$ vim arch/arm/plat-s3c24xx/common-smdk.c

109 /* NAND parititon from 2.4.18-swl5 */
    110 
    111 static struct mtd_partition smdk_default_nand_part[] = {
    112         [0] = {
    113                 .name   = "u-boot",
    114                 .size   = 0x00040000,
    115                 .offset = 0,
    116         },
    117         [1] = {
    118                 .name   = "param",
    119                 .offset = 0x00040000,
    120                 .size   = 0x00020000,
    121         },
    122         [2] = {
    123                 .name   = "kernel",
    124                 .offset = 0x00060000,
    125                 .size   = 0x00300000,
    126         },
    127         [3] = {
    128                 .name   = "rootfs",
    129                 .offset = 0x00360000,
    130                 .size   = 0x0FCA0000,
    131         },
    132 };

修改nand flash 读写时序配置。

143 /* choose a set of timings which should suit most 512Mbit
    144  * chips and beyond.
    145 */
    146 
    147 static struct s3c2410_platform_nand smdk_nand_info = {
    148         .tacls          = 10,
    149         .twrph0         = 25,
    150         .twrph1         = 10,
    151         .nr_sets        = ARRAY_SIZE(smdk_nand_sets),
    152         .sets           = smdk_nand_sets,
    153 }

6. 去掉硬件ECC校验配置。

$ vim drivers/mtd/nand/s3c2410.c

822                 chip->ecc.mode      = NAND_ECC_NONE;

7. 执行make s3c2410_defconfig 加载s3c2410的默认配置参数。

$ make s3c2410_defconfig

配置内核

$make menuconfig

8. 修改Kernel Feature选项,添加对新的编译工具的支持:

Kernel Features  --->

[*] Use the ARM EABI to compile the kernel

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

9.添加NAND Flash驱动:

Device Drivers  --->

<*> Memory Technology Device (MTD) support  --->

<*>   NAND Device Support  --->

<*>   NAND Flash support for Samsung S3C SoCs

[ ]     Samsung S3C NAND driver debug

[ ]     Samsung S3C NAND Hardware ECC

10. 编译内核:这里我们把内核编译成uImage的格式,如果系统当前工具链不支持uImage编译的话先要安装uImage编译工具。

$sudo apt-get install uboot-mkimage

$make uImage

我的笔记本编译很慢 ,20分钟左右

终于编译完成 

uImage就是linux的内核,可以直接烧录到nand flash镜像文件,路径在arch/arm/boot ,如下图

此时编译出的内核还并不能启动文件系统,如下:

11.  下载yaffs2源代码:

如果系统已经安装git工具,就直接执行:

$ git clone git://www.aleph1.co.uk/yaffs2

12.进入源码目录,为内核打支持yaffs2的补丁:

$cd yaffs2

$   ./patch-ker.sh c m ../linux-2.6.35(此处我输入命令显示错误 )在网上查找好多无解
  应为:
   #  ./patch-ker.sh c m /home/book/mylinux/linux-2.6.34.1
应在yaffs2目录内 ,如图:

13. 重新配置内核,添加yaffs文件系统的支持:
    "# cd .."进入linux-2.6.43.1

$make menuconfig

File System--->

[*] Miscellaneous filesystems--->

<*> yaffs2 file system support (此处有yaffs2 file system support出现 ) 
 
执行命令:# make ulmage  (此处的u"I"mage,"I"不是小写的L,是大写的i,第一次我也搞错了 )
出现如下信息

 
经过漫长等待:如下

此时可以大功告成了

linux-2.6.34.1打yaffs2补丁时出错:bash: ./patch-ker.sh: Permission denied

解决办法是:在yaffs目录下进行 chmod   777 patch-ker.sh 命令就可以了。

重新编译文件系统后可以正常启动:

14.添加DM9000网卡的支持:

修改arch/arm/mach-s3c2440/mach-smdk2440.c,构建DM9000平台设备
#include <linux/dm9000.h> 
#define MACH_TQ2440_DM9K_BASE (S3C2410_CS4 + 0x300) 
/* support DM9000 */ 
static struct resource TQ2440_dm9k_resource[] = { 
[0] = { 
.start = MACH_TQ2440_DM9K_BASE, 
.end = MACH_TQ2440_DM9K_BASE + 3, 
.flags = IORESOURCE_MEM
}, 
[1] = { 
.start = MACH_TQ2440_DM9K_BASE + 4, 
.end = MACH_TQ2440_DM9K_BASE + 7, 
.flags = IORESOURCE_MEM 
}, 
[2] = {
.start = IRQ_EINT7,
.end = IRQ_EINT7,
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE
}
}; 
/*
* The DM9000 has no eeprom, and set it's MAC address
*/ 
static struct dm9000_plat_data TQ2440_dm9k_pdata = {
.flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
.dev_addr = "\x00\x11\x22\x33\x44\x66",
};

static struct platform_device TQ2440_device_eth = {
.name = "dm9000",
.id = -1,
.num_resources = ARRAY_SIZE(TQ2440_dm9k_resource),
.resource = TQ2440_dm9k_resource, 
.dev = { 
.platform_data = &TQ2440_dm9k_pdata,
},
};

smdk2440_devices[] 结构体数组添加如下代码

&TQ2440_device_eth

15.修改drivers/net/ethernet/davicom/dm9000.c第44行加入如下代码

#include "dm9000.h"
#if defined(CONFIG_ARCH_S3C2440)
#include <mach/regs-mem.h>
#endif

第1375行加入如下代码

u32 id_val;
#if defined(CONFIG_ARCH_S3C2440)
unsigned int oldval_bwscon = *(volatile unsigned int *)S3C2410_BWSCON;
unsigned int oldval_bankcon4  =  *(volatile  unsigned  int *)S3C2410_BANKCON4;
#endif

/* Init network device */

第1387行加入如下代码

dev_dbg(&pdev->dev, "dm9000_probe()\n");
#if defined(CONFIG_ARCH_S3C2440)
/* 设置Bank4:总线宽度为16,使能nWAIT */
*((volatile unsigned int *)S3C2410_BWSCON) = (oldval_bwscon & ~(3<<16)) |
S3C2410_BWSCON_DW4_16 | S3C2410_BWSCON_WS4 | S3C2410_BWSCON_ST4;
/* 设置Bandk4的时间参数 */
*((volatile unsigned int *)S3C2410_BANKCON4) = 0x1f7c;
#endif

/* setup board info structure */

第1615行

out:

/* 恢复寄存器原来的值 */
#if defined(CONFIG_ARCH_S3C2440)
*(volatile unsigned int *)S3C2410_BWSCON = oldval_bwscon;
*(volatile unsigned int *)S3C2410_BANKCON4 = oldval_bankcon4;
#endif

16.配置内核支持DM9000

# make menuconfig

[*] Networking support  --->

Networking options  --->

<*> Packet socket

<*> Unix domain socket

[*] TCP/IP networking

[*]   IP: multicasting

[*]   IP: kernel level autoconfiguration

[*]     IP: BOOTP support

Device Drivers  --->

[*] Network device support  --->

[*]   Ethernet (10 or 100Mbit)  --->

<*>   DM9000 support

File systems  --->

[*] Network File Systems (NEW)  --->

<*>   NFS client support

[*]     NFS client support for NFS version 3 (NEW)

[*]       NFS client support for the NFSv3 ACL protocol extension

[*]   Root file system on NFS

17.重新编译内核并设置u-boot启动参数,通过NFS挂载根文件系统
TQ2440 # set bootargs root=/dev/nfs nfsroot=192.168.1.8:/home/work/rootfs ip=192.168.1.100 init=/linuxrc console=ttySAC0,115200

TQ2440 # save

20130616晚22:51睡觉      ,未完待续.................................

linux-2.6.34.1移植到TQ2440相关推荐

  1. ARM Linux.2.6.34内核移植

    ARM-LINUX-GCC版本4.3.2.以安装在/usr/local/arm/4.3.2下. 第一步: 修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修 ...

  2. u-boot-2012.04.01移植到TQ2440

    u-boot-2012.04.01移植到TQ2440(一):建立自己的开发板 到官网http://ftp.denx.de/pub/u-boot/下载u-boot-2012.04.01.tar.bz2 ...

  3. linux内核移植与开发板,Linux 2.6.36内核移植飞凌OK6410开发板完整步骤详解

    Linux 2.6.36内核移植飞凌OK6410开发板完整步骤详解 [复制链接] 今天终于让Linux内核在飞凌的板子上跑起来了,想来也是艰辛,为了移植成功,断断续续做了将近两个月的努力,期间郁闷不可 ...

  4. java aix 移植linux,[转]程序的可移植性:window,linux,aix,solaris下程序移植体会

    程序的可移植性:window,linux,aix,solaris下程序移植体会 - [工作学习] 1.类型 我们知道,在Windows平台中,系统定义了很多诸如BOOL,CHAR,ULONG,HAND ...

  5. 将c程序移植到linux,各位大侠:我把原来在linux运行的c程序移植到HPUNIX上出现了错误...

    各位大侠:我把原来在linux运行的c程序移植到HPUNIX上出现了错误 (2012-04-11 00:43:47) 标签: linux c程序 杂谈 各位大侠:我把原来在linux运行的c程序移植到 ...

  6. Linux内核的裁剪和移植

    linux内核的裁剪和移植具体都在这个网址里面. https://blog.csdn.net/xie0812/article/details/10816059 https://blog.csdn.ne ...

  7. linux 2.6.35 内核配置 usb,Linux 2.6.24.4移植到S3C2410(nano2410)之:USB

    Linux 2.6.24.4移植到S3C2410(nano2410)之:USB [平台信息] 目标板(Nano2410)------------------------ CPU: S3C2410X S ...

  8. linux内核的队列实现移植

    linux内核的队列实现移植 [!TOC] 在c编程中有时会使用一些常用的数据结构,如队列.每次都手写一遍有些麻烦,写一个通用的比较好,而内核有实现队列,直接移植出来就好了. 内核的队列实现 内核的队 ...

  9. 嵌入式Linux的MiniGUI研究和移植

    1 嵌入式Linux下的GUI概况 1.1 GUI在嵌入式系统中的地位 随着嵌入式系统的广泛应用,PDA.机顶盒.DVD/VCD播放机及WAP手机已经迅速普及.图形用户界面(GUI)的广泛流行,是当今 ...

  10. linux根文件系统的移植 课程设计,linux课程设计bootloader的移植.doc

    linux课程设计bootloader的移植 嵌 入 式 Linux 课 程 设 计 报 告 课题:嵌入式Linux下的bootloader之u-boot的移植 姓名: 胡欢 专业班级: 电信三班 学 ...

最新文章

  1. Sequence point 中文
  2. Forefront基本知识介绍
  3. Go语言Flag的简单示例
  4. CTFshow php特性 web90
  5. 用pytorch实现简易RNN
  6. webrtc 实现web端对端视频
  7. 什么是脱离文档流?什么是文档流?
  8. Python中的iteritems()和items()
  9. python导入包的输入法_python 模块和包的导入
  10. mysql 在结果集中随机_MySql从表结果集中随机取一条数据
  11. Java多线程学习三十四:使用 Future 有哪些注意点?Future 产生新的线程了吗
  12. Security+ 学习笔记16 密钥管理
  13. 初中计算机考试软件word,初中信息技术中考系统中操作题word部分.doc
  14. 浅谈物联网的关键技术和难点
  15. c语言 菜单选择,设计一通过 c语言 个简单实用的菜单,通过菜单选择不同的菜单项并实现相应的功能。...
  16. Android参考之代号、标签和版本号
  17. html5手机移动端三级联动城市选择器,jquery移动端省市县(区)三级联动插件
  18. 93 Three.js 使用设置normalMap创建更加细致的凹凸和褶皱
  19. ALEVEL经济知识点讲解:政府对市场的干预
  20. python嵩天课后题答案第三章_python语言程序设计基础(嵩天)第三章课后习题部分个人练习...

热门文章

  1. 批处理版音视频播放器(甲兵时代原创批处理)(上)
  2. 修改密码 的测试用例(web)
  3. 【原】移动web页面给用户发送邮件的方法 (邮件含文本、图片、链接)
  4. excel函数自变量linux,excle 求自变量 | 如何用EXCEL已知自变量和函数值求函数式
  5. HadoopYarn设置Fair Scheduler公平调度器
  6. 拆分pdf文件最简单的方法
  7. tomcat7 性能优化
  8. Scapy:send函数剖析(参数、返回值、应用)
  9. 智能不止联络,容联助力银行以服务创造价值
  10. 下采样downsample和decimate