linux-2.6.34.1移植到TQ2440
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
TQ2440 # save
20130616晚22:51睡觉 ,未完待续.................................
linux-2.6.34.1移植到TQ2440相关推荐
- ARM Linux.2.6.34内核移植
ARM-LINUX-GCC版本4.3.2.以安装在/usr/local/arm/4.3.2下. 第一步: 修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修 ...
- 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 ...
- linux内核移植与开发板,Linux 2.6.36内核移植飞凌OK6410开发板完整步骤详解
Linux 2.6.36内核移植飞凌OK6410开发板完整步骤详解 [复制链接] 今天终于让Linux内核在飞凌的板子上跑起来了,想来也是艰辛,为了移植成功,断断续续做了将近两个月的努力,期间郁闷不可 ...
- java aix 移植linux,[转]程序的可移植性:window,linux,aix,solaris下程序移植体会
程序的可移植性:window,linux,aix,solaris下程序移植体会 - [工作学习] 1.类型 我们知道,在Windows平台中,系统定义了很多诸如BOOL,CHAR,ULONG,HAND ...
- 将c程序移植到linux,各位大侠:我把原来在linux运行的c程序移植到HPUNIX上出现了错误...
各位大侠:我把原来在linux运行的c程序移植到HPUNIX上出现了错误 (2012-04-11 00:43:47) 标签: linux c程序 杂谈 各位大侠:我把原来在linux运行的c程序移植到 ...
- Linux内核的裁剪和移植
linux内核的裁剪和移植具体都在这个网址里面. https://blog.csdn.net/xie0812/article/details/10816059 https://blog.csdn.ne ...
- 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 ...
- linux内核的队列实现移植
linux内核的队列实现移植 [!TOC] 在c编程中有时会使用一些常用的数据结构,如队列.每次都手写一遍有些麻烦,写一个通用的比较好,而内核有实现队列,直接移植出来就好了. 内核的队列实现 内核的队 ...
- 嵌入式Linux的MiniGUI研究和移植
1 嵌入式Linux下的GUI概况 1.1 GUI在嵌入式系统中的地位 随着嵌入式系统的广泛应用,PDA.机顶盒.DVD/VCD播放机及WAP手机已经迅速普及.图形用户界面(GUI)的广泛流行,是当今 ...
- linux根文件系统的移植 课程设计,linux课程设计bootloader的移植.doc
linux课程设计bootloader的移植 嵌 入 式 Linux 课 程 设 计 报 告 课题:嵌入式Linux下的bootloader之u-boot的移植 姓名: 胡欢 专业班级: 电信三班 学 ...
最新文章
- Sequence point 中文
- Forefront基本知识介绍
- Go语言Flag的简单示例
- CTFshow php特性 web90
- 用pytorch实现简易RNN
- webrtc 实现web端对端视频
- 什么是脱离文档流?什么是文档流?
- Python中的iteritems()和items()
- python导入包的输入法_python 模块和包的导入
- mysql 在结果集中随机_MySql从表结果集中随机取一条数据
- Java多线程学习三十四:使用 Future 有哪些注意点?Future 产生新的线程了吗
- Security+ 学习笔记16 密钥管理
- 初中计算机考试软件word,初中信息技术中考系统中操作题word部分.doc
- 浅谈物联网的关键技术和难点
- c语言 菜单选择,设计一通过 c语言 个简单实用的菜单,通过菜单选择不同的菜单项并实现相应的功能。...
- Android参考之代号、标签和版本号
- html5手机移动端三级联动城市选择器,jquery移动端省市县(区)三级联动插件
- 93 Three.js 使用设置normalMap创建更加细致的凹凸和褶皱
- ALEVEL经济知识点讲解:政府对市场的干预
- python嵩天课后题答案第三章_python语言程序设计基础(嵩天)第三章课后习题部分个人练习...