linux 2.6 内核的移植

内核移植过程

  下载 linux 内核

http://www.kernel.org/pub/linux/kernel/v2.6/linux­2.6.14.1.tar.bz2

下载 linux­2.6.14.1 内核至 home/arm/dev_home/kernel. [[email protected] ~]#su arm

[[email protected] ~]#cd $KERNEL

[[email protected] kernel]#tar ­xzvf linux­2.6.14.1.tar.gz [[email protected] kernel]# pwd

/home/arm/dev_home/kernel [[email protected] kernel]# cd linux­2.6.14

进入内核解压后的目录,以后示例中,只要是相对路径全部是相对于

/home/arm/dev_home/kernel/linux­2.6.14/此目录

   修改 Makefile

修改内核目录树根下的的 Makefile,指明交叉编译器 [[email protected]     linux­2.6.14]#     vi     Makefile 找到 ARCH 和 CROSS_COMPILE,修改

ARCH             ?= arm CROSS_COMPILE   ?= arm­linux­

然后设置你的 PATH 环境变量,使其可以找到你的交叉编译工具链 [[email protected] linux­2.6.14]# echo $PATH

/usr/local/arm/3.4.4/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/ly/bin

如果/usr/local/arm/3.4.4/bin
搜索路径, 加入下面语句在~/.bashrc 中

[[email protected]
linux­2.6.14]# vi ~/.bashrc export PATH=/usr/local/arm/3.4.4/bin:$PATH

再重新登陆.

[[email protected]
linux­2.6.14]#su arm

   设置
flash 分区

此处一共要修改 3 个文件,分别是:

指明分区信息

在 arch/arm/mach­s3c2410/devs.c
文件中:

[[email protected]
linux­2.6.14]$ vi arch/arm/mach­s3c2410/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[] ={

{ /* 1MB */

name:
"bootloader", size: 0x00100000, offset: 0x0,

},{ /* 3MB */

name: "kernel", size:    0x00300000,
offset: 0x00100000,

}, { /* 40MB */

name:
"root",

size:     0x02800000, offset: 0x00400000,

}, { /* 20MB */

name: "user", size: 0x00f00000,

offset:
0x02d00000,

}

};

name: 代表分区名字

size: 代表 flash 分区大小(单位:字节)

offset: 代表 flash 分区的起始地址(相对于 0x0 的偏移)

目标板计划分 4 个区,分别存放 bootloader,
kernel, rootfs 以及以便以后扩展使用的用户文件系统空间。 各分区在
Nand flash 中起始地址. 分区大小. 记录如下:

bootloader:

start: 0x00000000 len:
0x00100000 1MB

kernel:

rootfs:

User:

start: 0x00100000 len:
0x00300000 3MB

start: 0x00400000 len:
0x02800000 40MB

start: 0x02c00000 len:
0x01400000 20MB

  1. 加入
    Nand
    Flash 分区

struct
s3c2410_nand_set nandset ={

nr_partitions: 4,                 /* the number of partitions */ partitions: partition_info, /* partition table                                     */

};

nr_partitions:
指明 partition_info 中定义的分区数目
partitions: 分区信息表

  1. 建立
    Nand
    Flash 芯片支持

struct s3c2410_platform_nand superlpplatform={ tacls:0,

twrph0:30, twrph1:0,

sets: &nandset, nr_sets: 1,

};

tacls, twrph0, twrph1 的意思见 S3C2410
手册的 6­3, 这 3 个值最后会被设置到 NFCONF 中,见 S3C2410 手册 6­6. sets: 支持的分区集

nr_set:分区集的个数

  1. 加入 Nand   Flash 
    芯片支持到 Nand   Flash 
    驱动 另外,还要修改此文件中的 s3c_device_nand 结构体变量,添加对 dev 成员的赋值 struct
    platform_device s3c_device_nand = {

.name              = "s3c2410­nand",     /* 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 */

.dev = {

.platform_data =
&superlpplatform

}

};

name:  设备名称

id:
有效设备编号,如果只有唯一的一个设备为­1, 有多个设备从 0 开始计数. num_resource: 有几个寄存器区

resource: 寄存器区数组首地址

dev: 支持的 Nand Flash 设备

指定启动时初始化

kernel
启动时依据我们对分区的设置进行初始配置 修改 arch/arm/mach­s3c2410/mach­smdk2410.c
文件

[[email protected]   linux­2.6.14]$   vi  
arch/arm/mach­s3c2410/mach­smdk2410.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 校验

我们的内核都是通过 UBOOT 写到 Nand Flash 的, UBOOT 通过的软件 ECC 算法产生 ECC 校验码, 这与内核 校验的 ECC 码不一样, 内核中的 ECC 码是由 S3C2410 中 Nand Flash 控制器产生的. 所以, 我们在这里选择禁止 内核 ECC 校验.

修改
drivers/mtd/nand/s3c2410.c 文件:

[[email protected]    linux­2.6.14]$    vi   
drivers/mtd/nand/s3c2410.c 找到 s3c2410_nand_init_chip()函数,在该函数体最后加上一条语句:
chip­>eccmode = NAND_ECC_NONE;

保存,退出。

OK.我们的关于 flash 分区的设置全部完工.

配置内核

支持启动时挂载 devfs

为了我们的内核支持 devfs 以及在启动时并在/sbin/init 运行之前能自动挂载/dev 为 devfs 文件系统,修改
fs/Kconfig 文件

[[email protected]
linux­2.6.14]$ 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

配置内核产生.config
文件

[[email protected]
linux­2.6.14]$ cp arch/arm/configs/smdk2410_defconfig .config [[email protected]
linux­2.6.14]$ 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 上.

#     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 分区,这样我们在前面设置的分区才有意义 [*] Command line partition table parsing

#支持从命令行设置 flash 分区信息,灵活

RAM/ROM/Flash
chip drivers ­­­>

<*> Detect flash chips by Common Flash Interface
(CFI) probe

<*> Detect non­CFI AMD/JEDEC­compatible 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  ­­­>

[*] Non­standard serial port support [*] S3C2410 RTC Driver

#接下来做的是针对文件系统的设置,本人实验时目标板上要上的文件系统是 cramfs,故做如下配置

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.

编译内核

[[email protected]
linux­2.6.14]$ make zImage

注意:若编译内核出现如下情况

LD       .tmp_vmlinux1
arm­linux­ld:arch/arm/kernel/vmlinux.lds:1439: parse error make: ***
[.tmp_vmlinux1] Error 1

解决方法:修改 arch/arm/kernel/vmlinux.lds
[[email protected] linux­2.6.14]$ vi arch/arm/kernel/vmlinux.lds 将文件尾 2 条的 ASSERT 注释掉(1439 行)

/* ASSERT((    proc_info_end ­     proc_info_begin), "missing CPU
support") */

/* ASSERT((    arch_info_end ­     arch_info_begin), "no machine record
defined") */

然后重新 make zImage 即可

下载 zImage 到开发板

CRANE2410 # tftp
0x30008000 zImage

TFTP
from server 192.168.1.6; our IP address is 192.168.1.5 Filename ‘zImage‘.

Load address:
0x30008000

Loading:
#################################################################

#################################################################

#################################################################

#############################

done

Bytes
transferred = 1142856 (117048 hex) CRANE2410 # bootm 0x30008000

目标板启动信息如下

IRQ Stack: 33fc149c FIQ
Stack: 33fc249c 1

1

DRAM
Configuration: Bank #0: 30000000 64 MB

1

NAND:64 MB

In:    serial Out: serial
Err:   serial

Hit
any key to stop autoboot: 0 zImage magic = 0x016f2818 NOW, Booting Linux......

Uncompressing
Linux............................................................................
don.Linux version 2.6.14.1 ([email protected]) (gcc version 3.3.2) #15 Thu Jul 6
14:26:29 CST 2006

CPU:
ARM920Tid(wb) [41129200] revision 0 (ARMv4T)

Machine:
SMDK2410

Warning:
bad configuration page, trying to continue Memory policy: ECC disabled, Data
cache writeback CPU S3C2410A (id 0x32410002)

S3C2410:
core 202.800 MHz, memory 101.400 MHz, peripheral 50.700 MHz S3C2410 Clocks, (c)
2004 Simtec Electronics

CLOCK:
Slow mode (1.500 MHz), fast, MPLL on, UPLL on CPU0: D VIVT write­back cache

CPU0: I cache:
16384 bytes, associativity 64, 32 byte lines, 8 sets

CPU0: D cache:
16384 bytes, associativity 64, 32 byte lines, 8 sets

Built 1
zonelists

Kernel
command line: noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200
irq: clearing subpending status 00000002

PID hash table
entries: 128 (order: 7, 2048 bytes)

timer
tcon=00500000, tcnt a509, tcfg 00000200,00000000, usec 00001e4c Console: colour
dummy device 80x30

Dentry
cache hash table entries: 4096 (order: 2, 16384 bytes) Inode­cache hash table
entries: 2048 (order: 1, 8192 bytes) Memory: 16MB = 16MB total

Memory:
13712KB available (1927K code, 422K data, 104K init) Mount­cache hash table
entries: 512

CPU:
Testing write buffer coherency: ok softlockup thread 0 started up.

NET:
Registered protocol family 16 S3C2410: Initialising architecture SCSI subsystem
initialized

usbcore:
registered new driver usbfs usbcore: registered new driver hub

S3C2410
DMA Driver, (c) 2003­2004 Simtec Electronics DMA channel 0 at c1800000, irq 33

DMA channel 1 at c1800040,
irq 34 DMA channel 2 at c1800080, irq 35 DMA channel 3 at c18000c0, irq 36

NetWinder
Floating Point Emulator V0.97 (double precision) devfs: 2004­01­31 Richard
Gooch ([email protected]) devfs: boot_options: 0x1

Console:
switching to colour frame buffer device 80x25

fb0: Virtual
frame buffer device, using 1024K of video memory

S3C2410 RTC, (c)
2004 Simtec Electronics

s3c2410_serial0 at MMIO
0x50000000 (irq = 70) is a S3C2410 s3c2410_serial1 at MMIO 0x50004000 (irq =
73) is a S3C2410 s3c2410_serial2 at MMIO 0x50008000 (irq = 76) is a S3C2410 io
scheduler noop registered

io
scheduler anticipatory registered io scheduler deadline registered

io scheduler cfq
registered

RAMDISK
driver initialized: 16 RAM disks of 4096K size 1024 blocksize Cirrus Logic
CS8900A driver for Linux (Modified for SMDK2410)

eth0:
CS8900A rev E at 0xe0000300 irq=53, no eeprom , addr: 08: 0:3E:26:0A:5B S3C24XX
NAND Driver, (c) 2004 Simtec Electronics

s3c2410­nand:
mapped registers at c1980000

s3c2410­nand:
timing: Tacls 10ns, Twrph0 30ns, Twrph1 10ns

NAND
device: Manufacturer ID: 0xec, Chip ID: 0x76 (Samsung NAND 64MiB 3,3V 8­bit)
NAND_ECC_NONE selected by board driver. This is not recommended !!

Scanning device
for bad blocks

Creating
4 MTD partitions on "NAND 64MiB 3,3V 8­bit": 0x00000000­0x00100000 :
"bootloader" 0x00100000­0x00500000 : "kernel"

0x00500000­0x02d00000
: "root"

0x02d00000­0x03c00000
: "User"

usbmon: debugfs
is not available

116x:
driver isp116x­hcd, 05 Aug 2005 s3c2410­ohci s3c2410­ohci: S3C24XX OHCI

s3c2410­ohci
s3c2410­ohci: new USB bus registered, assigned bus number 1 s3c2410­ohci
s3c2410­ohci: irq 42, io mem 0x49000000

usb usb1:
Product: S3C24XX OHCI

usb
usb1: Manufacturer: Linux 2.6.14.1 ohci_hcd usb usb1: SerialNumber: s3c24xx

hub
1­0:1.0: USB hub found hub 1­0:1.0: 2 ports detected

sl811:
driver sl811­hcd, 19 May 2005 usbcore: registered new driver cdc_acm

drivers/usb/class/cdc­acm.c:
v0.23:USB Abstract Control Model driver for USB modems and ISDN
adaptesdrivers/usb/class/bluetty.c: USB Bluetooth support registered

usbcore:
registered new driver bluetty drivers/usb/class/bluetty.c: USB Bluetooth tty
driver v0.13 usbcore: registered new driver usblp

drivers/usb/class/usblp.c:
v0.13: USB Printer Device Class driver Initializing USB Mass Storage driver...

usbcore:
registered new driver usb­storage USB Mass Storage support registered.

mice:
PS/2 mouse device common for all mice NET: Registered protocol family 2

IP
route cache hash table entries: 256 (order: ­2, 1024 bytes) TCP established
hash table entries: 1024 (order: 0, 4096 bytes) TCP bind hash table entries:
1024 (order: 0, 4096 bytes)

TCP:
Hash tables configured (established 1024 bind 1024) TCP reno registered

TCP bic
registered

NET: Registered
protocol family 1

NET: Registered
protocol family 17

Reading
data from NAND FLASH without ECC is not recommended VFS: Mounted root (cramfs
filesystem) readonly.

Mounted
devfs on /dev Freeing init memory: 104K

Reading
data from NAND FLASH without ECC is not recommended mount /etc as ramfs

re­create the
/etc/mtab entries

­­­­­­­­­­­­mount
/dev/shm as tmpfs

­­­­­­­­­­­­mount
/proc as proc

­­­­­­­­­­­­mount
/sys as sysfs

init
started: BusyBox v1.1.3 (2006.07.03­03:43+0000) multi­call binary Starting pid
28, console /dev/tts/0: ‘/etc/init.d/rcS‘

in /etc/init.d/rcS

­­­­­­­­­­­­­/sbin/ifconfig
eth0 192.168.1.5

Please press
Enter to activate this console.

原文地址:https://www.cnblogs.com/fanweisheng/p/11105652.html

时间: 2024-11-05 21:38:08

linux 2.6 内核的移植的相关文章

Linux内核裁剪移植学习分享

1. 内核裁剪移植 内核源码是大量模块代码的集合! 每一个模块代码都是大量的.c 和 .h文件组成的! 内核是系统所有功能的集合! 内核镜像是一个二进制文件,是一个大型可执行程序! 内核源码包:linux-3.5.buildok.tar.gz 内核移植步骤: 1)把内核源码包复制到linux系统下的 /work/目录下,并解压! 命令: cp  /mnt/hgfs/xxxxx/linux-3.5.buildok.tar.gz  /work/ cd  /work tar  xf  linux-3.

【转载】LINUX 和 WINDOWS 内核的区别

LINUX 和 WINDOWS 内核的区别 [声明:欢迎转载,转载请注明出自CU ACCESSORY http://linux.chinaunix.net/bbs/thread-1153868-1-1.html] 关于LINUX和WINDOWS的口水站已经很多了.本文企图从技术角度来比较下2个主流操作系统的异同.偏重于内核部分. 一.动机: 我最早是 WINDOWS 阵营的.在WINDOWS下写过2年多的驱动程序.后来由于学习需要,转投LINUX,一晃也快2年了.期间经历了很多曲折,也学到了很多

基于linux 3.10的yaffs2移植(转)

最近想起来还有一块mini2440的开发板很久没有使用了,所以想移植一个基于linux3.10的linux系统,但是在移植yaffs2文件系统的时候出现了一些问题,我将其记录下来给其他同学解决同样的问题提供帮助. 1. 首先通过git下载yaffs2代码.然后进入yaffs2文件夹中执行patch-ker.sh,给linux源代码打上patch. $ git clone git://www.aleph1.co.uk/yaffs2 $ cd yaffs2/ $ ./patch-ker.sh c m

Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装

原文:Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装 Linux内核分析(一) 从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解. 今天我们会分析到以下内容: 1.      Linux体系结构简介 2.      Linux内核源码简介 3.      Linux内核配置.编译.安装 l  Linux体系结构简介 1.       Linux体系结构(linux系统构成)

《Linux设备驱动开发具体解释(第3版)》(即《Linux设备驱动开发具体解释:基于最新的Linux 4.0内核》)网购链接

<Linux设备驱动开发具体解释:基于最新的Linux 4.0内核> china-pub   spm=a1z10.3-b.w4011-10017777404.30.kvceXB&id=521111707813&rn=4cf013961288ab7c4dfd2016aeb21fa8&abbucket=5">天猫     dangdang   京东 China-pub 8月新书销售榜 推荐序一 技术日新月异,产业斗转星移,滚滚红尘,消逝的事物太多,新事物的诞

《Linux设备驱动开发详解:基于最新的Linux 4.0内核》china-pub预售

<Linux设备驱动开发详解:基于最新的Linux 4.0内核>china-pub今日上线进入预售阶段: http://product.china-pub.com/4733972 推荐序一 技术日新月异,产业斗转星移,滚滚红尘,消逝的事物太多,新事物的诞生也更迅猛.众多新生事物如灿烂烟花,转瞬即逝.当我们仰望星空时,在浩如烟海的专业名词中寻找,赫然发现,Linux的生命力之旺盛顽强,斗志之昂扬雄壮,令人称奇.它正以摧枯拉朽之势迅速占领包括服务器.云计算.消费电子.工业控制.仪器仪表.导航娱乐等

《Linux设备驱动开发详解:基于最新的Linux 4.0内核》china-pub 预售

<Linux设备驱动开发详解:基于最新的Linux 4.0内核>china-pub今日上线进入预售阶段: http://product.china-pub.com/4733972 推荐序一 技术日新月异,产业斗转星移,滚滚红尘,消逝的事物太多,新事物的诞生也更迅猛.众多新生事物如灿烂烟花,转瞬即逝.当我们仰望星空时,在浩如烟海的专业名词中寻找,赫然发现,Linux的生命力之旺盛顽强,斗志之昂扬雄壮,令人称奇.它正以摧枯拉朽之势迅速占领包括服务器.云计算.消费电子.工业控制.仪器仪表.导航娱乐等

查看linux系统和内核版本

1. 查看内核版本命令: 1) [[email protected] ~]# cat /proc/version Linux version 2.6.9-22.ELsmp ([email protected]) (gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)) #1 SMP Mon Sep 19 18:00:54 EDT 2005 2) [[email protected] ~]# uname -a Linux q1test01 2.6.9-22.EL

linux操作系统网络内核优化

服务器做web应用(Http/Nginx)Linux内核参数优化 Linux系统下,TCP连接断开后,会以TIME_WAIT状态保留一定的时间,然后才会释放端口.当并发请求过多的时候, 就会产生大量的TIME_WAIT状态的连接,无法及时断开的话,会占用大量的端口资源和服务器资源.这个时候我们可以优化TCP的内核参数, 来及时将TIME_WAIT状态的端口清理掉. 本文介绍的方法只对拥有大量TIME_WAIT状态的连接导致系统资源消耗有效,如果不是这种情况下,效果可能不明显. 可以使用netst