linux26111内核移植全纪录.docx

上传人:b****7 文档编号:10788574 上传时间:2023-02-22 格式:DOCX 页数:19 大小:21.70KB
下载 相关 举报
linux26111内核移植全纪录.docx_第1页
第1页 / 共19页
linux26111内核移植全纪录.docx_第2页
第2页 / 共19页
linux26111内核移植全纪录.docx_第3页
第3页 / 共19页
linux26111内核移植全纪录.docx_第4页
第4页 / 共19页
linux26111内核移植全纪录.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

linux26111内核移植全纪录.docx

《linux26111内核移植全纪录.docx》由会员分享,可在线阅读,更多相关《linux26111内核移植全纪录.docx(19页珍藏版)》请在冰豆网上搜索。

linux26111内核移植全纪录.docx

linux26111内核移植全纪录

Linux-2.6.11内核及部分驱动移植过程总结

by天海一线

2009-11-24

一、环境介绍:

Host:

FedoraCore4,arm-linux-gcc-3.4.1

Client:

linux-2.6.11.1,QT2410E开发板V4

二、移植过程

1、基本移植

(1)修改Makefile文件:

ARCH?

=arm

CROSS_COMPILE?

=arm-linux-

(2)拷贝基本配置文件

cparch/arm/configs/s3c2410_defconfig.config

(3)编译测试

Make

(4)添加NANDFLASH分区信息

开发板上NAND共64M,分区为:

0-0x30000Bootloader192K(0x30000)

0x30000-0x200000Kernel1586K(0x1d0000)

0x200000-0x1800000rootfs22M(0x1600000)

0x1800000-0x4000000yaffsfs40M(0x2800000)

在arch/arm/mach-s3c2410/devs.c中添加

/*NANDController*/

#include

#include

#include

staticstructmtd_partitionpartition_info[]={

{

name:

"bootloader",

size:

0x30000,

offset:

0,

},

{

name:

"kernel",

size:

0x1d0000,

offset:

0x30000,

},

{

name:

"rootfs",

size:

0x1600000,

offset:

0x200000,

},

{

name:

"yaffsfs",

size:

0x2800000,

offset:

0x1800000,

},

};

structs3c2410_nand_setnandset={

nr_partitions:

4,

partitions:

partition_info,

};

structs3c2410_platform_nandgyhPlatform={

tacls:

0,

twrph0:

30,

twrph1:

0,

sets:

&nandset,

nr_sets:

1,

};

在s3c_device_nand结构中添加dev属性:

.dev={

.platform_data=&gyhPlatform

}

在arch/arm/mach-s3c2410/mach-smdk2410.c中的smdk2410_devices[]结构体中添加&s3c_device_nand使内核在启动的时候初始化nandflash信息。

(5)测试

make

(6)编写生成uImage的脚本mkuImage.sh

#!

/bin/sh

mkimage-Aarm–Olinux–Tkernel–Cnone–n“linux-2.6.11.1”–a30008000–e30008040–dzImageuImage

chmodu+xmkuImage.sh

./mkuImage.sh

(7)复位开发板,在minicom下,停到uboot的下载模式:

setenvwktftp30008000uImage\;nanderase300001d0000\;nandwrite30008000300001d0000

saveenv

runwk

bootm30008000

能够启动系统且分区信息正确。

2、定制系统

makemenuconfig:

Codematurityleveloptions全选

LoadablemodulesupportEnableloadablemodulesupport

Moduleunloading

Moduleversioningsupport

Automatickernelmoduleloading

GeneralsetupSupportforhot-pluggabledevices选择

SCSIdevicesupportSCSIdisksupport选择

ProbeallLUNsoneachSCSIdevice选择

InputdevicesupportTouchscreeninterface选择

Eventinterface选择

Eventdebugging选择

FilesystemsKernelautomountersupport

Kernelautomounterversion4support

Pseudofilesystems/devfilesystemsupport(OBSOLETE)

MiscellaneousfilesystemsCompressedROMfilesystemsupport(cramfs)

NetworkFileSystemsNFS相关的全面选择即可

NativeLanguageSupport选择437,cp936,Latin1,NLSUTF8

暂时只修改这些,重新编译并下载(runwk)。

3、RTC移植

执行hwclock,提示/dev/misc/rtc不存在。

在arch/arm/mach-s3c2410/mach-smdk2410.c中的smdk2410_devices[]结构体中添加&s3c_device_rtc使内核在启动的时候初始化rtc。

重新编译下载内核,执行hwclock成功。

date112415372009.20

hwclock–s

hwclock

显示TueNov2415:

39:

0520090.000000seconds(时间更新了,成功)

4、移植yaffs文件系统支持

下载yaffs文件系统源码,进入yaffs2文件夹下,执行

./patch-ker.shc~/linux-2.6.11.1/

给内核打上yaffs文件系统补丁。

回到内核目录,makemenuconfig

FileSystemsMiscellaneousfilesystemsYAFFS2filesystemsupport

Let’syaffsdoitsownECC

重新编译下载内核,可以挂在yaffs分区了,但是出现了读写NAND时未进行ECC校验的提示,找到drivers/mtd/nand/nand_base.c文件中的nand_write_page,nand_read_ecc,nand_scan三个函数,分别注释掉相应的提示语句即可消除烦人的提示了。

5、网卡CS8900A的驱动移植

(1)拷贝cs8900源码至内核目录

#cpcs8900.c./drivers/net/arm/

#cpcs8900.h./drivers/net/arm/

(2)修改cs8900.c

在cs8900_probe()函数中,memset(&priv,0,sizeof(cs8900_t));函数之后添加如下两条语句:

__raw_writel(0x2211d110,S3C2410_BWSCON);

__raw_writel(0x1f7c,S3C2410_BANKCON3);

应该先添加头文件#include

(3)修改Kconfig以允许配置

修改drivers/net/arm/目录下的Kconfig文件,在最后添加如下内容:

ConfigARM_CS8900

tristate"CS8900support"

dependsonNET_ETHERNET&&ARM&&ARCH_SMDK2410

help

SupportforCS8900AchipsetbasedEthernetcards.Ifyouhaveanetwork(Ethernet)cardofthistype,sayYandreadtheEthernet-HOWTO,availablefromaswellas.

Tocompilethisdriverasamodule,chooseMhereandread

.Themodulewillbe

calledcs8900.o.

(4)修改Makefile加入编译

修改drivers/net/arm/目录下的Makefile文件,在最后添加如下内容:

obj-$(CONFIG_ARM_CS8900)+=cs8900.o

(5)在/arch/arm/mach-s3c2410/mach-smdk2410.c文件中,找到smdk2410_iodesc[]结构数组,添加如下如下内容:

{vSMDK2410_ETH_IO,pSMDK2410_ETH_IO,SZ_1M,MT_DEVICE}

应先添加头文件#include

在include/asm-arm/arch-s3c2410/目录下创建smdk2410.h文件,其内容为:

#ifndef_INCLUDE_SMDK2410_H_

#define_INCLUDE_SMDK2410_H_

#include

#definepSMDK2410_ETH_IO0x19000000

#definevSMDK2410_ETH_IO0xE0000000

#defineSMDK2410_ETH_IRQIRQ_EINT9

#endif//_INCLUDE_SMDK2410_H_

(6)makemenuconfig选择CS8900A项,编译下载,CS8900可以工作了。

6、LCD移植

(1)拷贝驱动源代码

cps3c2410fb.hdrivers/video/

cps3c2410fb.cdrivers/video/

(2)修改drivers/video目录下的Kconfig文件,在最后添加如下内容:

configFB_S3C2410

tristate"S3C2410LCDsupport"

dependsonFB&&ARM&&ARCH_S3C2410

help

  ThisisaframebufferdevicefortheS3C2410LCDController.  IfyouplantousetheLCDdisplaywithyourS3C2410system,say  Yhere.

(3)修改drivers/video目录下的Makefile文件,在最后添加如下内容:

obj-$(CONFIG_FB_S3C2410)      +=s3c2410fb.ocfbfillrect.ocfbcopyarea.ocfbimgblt.o

(4)makemenuconfig配置LCD,重新编译并下载,看到小企鹅了。

注:

其他配置会影响LCD驱动,导致OOPS,

Codematurityleveloptions全选

LoadablemodulesupportEnableloadablemodulesupport

Moduleunloading

Moduleversioningsupport

Automatickernelmoduleloading

(5)测试

ls–l>/dev/tty1LCD上显示目录,搞定。

7、触摸屏移植

(1)拷贝驱动源文件

cps3c2410_ts.cdrivers/input/Touchscreen/

(2)修改drivers/input/Touchscreen/下Makefile文件

添加obj-$(CONFIG_TOUCHSCREEN_S3C2410)+=s3c2410_ts.o

(3)修改drivers/input/Touchscreen/下Kconfig文件,在最后添加

configTOUCHSCREEN_S

tristate"SamsungS3C2410touchscreeninputdriver"

dependsonARCH_SMDK2410&&INPUT&&INPUT_TOUCHSCREEN

selectSERIO

help

SayYhereifyouhavethes3c2410touchscreen.

Ifunsure,sayN.

Tocompilethisdriverasamodule,chooseMhere:

the

modulewillbecalleds3c2410_ts.

configTOUCHSCREEN_S3C2410_DEBUG

boolean"SamsungS3C2410touchscreendebugmessages"

dependsonTOUCHSCREEN_S3C2410

help

Selectthisifyouwantdebugmessages

(4)在arch/arm/mach-s3c2410/mach-smdk2410.c,中增加如下内容:

#include

staticstructs3c2410_ts_mach_infosbc2410_ts_cfg__initdata={

.delay=10000,

.presc=49,

.oversampling_shift=2,

};

在smdk2410_devices结构中,添加:

&s3c_device_ts,

在smdk2410_map_io函数中添加:

set_s3c2410ts_info(&sbc2410_ts_cfg);

(5)在arch/arm/mach-s3c2410/devs.h文件中添加:

externstructplatform_devices3c_device_ts;

(6)在arch/arm/mach-s3c2410/devs.c文件中添加如下几行:

#include

/*Touchscreen*/

staticstructs3c2410_ts_mach_infos3c2410ts_info;

void__initset_s3c2410ts_info(structs3c2410_ts_mach_info*hard_s3c2410ts_info)

{

memcpy(&s3c2410ts_info,hard_s3c2410ts_info,sizeof(structs3c2410_ts_mach_info));

}

EXPORT_SYMBOL(set_s3c2410ts_info);

structplatform_devices3c_device_ts={

.name="s3c2410-ts",

.id=-1,

.dev={

.platform_data=&s3c2410ts_info,

}

};

EXPORT_SYMBOL(s3c_device_ts);

(7)创建asm/arch-s3c2410/s3c2410_ts.h文件,内容如下

#ifndef__ASM_ARM_S3C2410_TS_H

#define__ASM_ARM_S3C2410_TS_H

structs3c2410_ts_mach_info{

intdelay;

intpresc;

intoversampling_shift;

};

void__initset_s3c2410ts_info(structs3c2410_ts_mach_info*hard_s3c2410ts_info);

#endif/*__ASM_ARM_S3C2410_TS_H*/

(8)创建asm/arch-s3c2410/regs-adc.h文件,内容如下

#ifndef__ASM_ARCH_REGS_ADC_H

#define__ASM_ARCH_REGS_ADC_H"regs-adc.h"

#defineS3C2410_ADCREG(x)(x)

#defineS3C2410_ADCCONS3C2410_ADCREG(0x00)

#defineS3C2410_ADCTSCS3C2410_ADCREG(0x04)

#defineS3C2410_ADCDLYS3C2410_ADCREG(0x08)

#defineS3C2410_ADCDAT0S3C2410_ADCREG(0x0C)

#defineS3C2410_ADCDAT1S3C2410_ADCREG(0x10)

 

/*ADCCONRegisterBits*/

#defineS3C2410_ADCCON_ECFLG(1<<15)

#defineS3C2410_ADCCON_PRSCEN(1<<14)

#defineS3C2410_ADCCON_PRSCVL(x)(((x)&0xFF)<<6)

#defineS3C2410_ADCCON_PRSCVLMASK(0xFF<<6)

#defineS3C2410_ADCCON_SELMUX(x)(((x)&0x7)<<3)

#defineS3C2410_ADCCON_MUXMASK(0x7<<3)

#defineS3C2410_ADCCON_STDBM(1<<2)

#defineS3C2410_ADCCON_READ_START(1<<1)

#defineS3C2410_ADCCON_ENABLE_START(1<<0)

#defineS3C2410_ADCCON_STARTMASK(0x3<<0)

 

/*ADCTSCRegisterBits*/

#defineS3C2410_ADCTSC_YM_SEN(1<<7)

#defineS3C2410_ADCTSC_YP_SEN(1<<6)

#defineS3C2410_ADCTSC_XM_SEN(1<<5)

#defineS3C2410_ADCTSC_XP_SEN(1<<4)

#defineS3C2410_ADCTSC_PULL_UP_DISABLE(1<<3)

#defineS3C2410_ADCTSC_AUTO_PST(1<<2)

#defineS3C2410_ADCTSC_XY_PST(x)(((x)&0x3)<<0)

//#defineS3C2410_ADCTSC_XY_PST(0x3<<0)

/*ADCDAT0Bits*/

#defineS3C2410_ADCDAT0_UPDOWN(1<<15)

#defineS3C2410_ADCDAT0_AUTO_PST(1<<14)

#defineS3C2410_ADCDAT0_XY_PST(0x3<<12)

#defineS3C2410_ADCDAT0_XPDATA_MASK(0x03FF)

/*ADCDAT1Bits*/

#defineS3C2410_ADCDAT1_UPDOWN(1<<15)

#defineS3C2410_ADCDAT1_AUTO_PST(1<<14)

#defineS3C2410_ADCDAT1_XY_PST(0x3<<12)

#defineS3C2410_ADCDAT1_YPDATA_MASK(0x03FF)

#endif/*__ASM_ARCH_REGS_ADC_H*/

(9)配置内核并编译下载

(10)测试

echo8>/proc/sys/kernel/printk

cat/dev/ts0

触动触摸屏,会显示坐标信息。

8、OHCI驱动移植

(1)拷贝源文件

cpohci-s3c2410.cdrivers/usb/host/

(2)修改drivers/usb/Kconfig文件,添加

configUSB_ARCH_HAS_HCD

boolean

defaultyifUSB_ARCH_HAS_OHCI

defaultyifARM#SL-811

defaultPCI

#manynon-PCISOCchipsembedOHCI

configUSB_ARCH_HAS_OHCI

boolean

#ARM:

defaultyifSA1111

defaultyifARCH_S3C2410

defaultyifARCH_OMAP

defaultyifARCH_LH7A404

defaultyifPXA27x

#PPC:

defaultyifSTB03xxx

defaultyifPPC_MPC52xx

#MIPS:

defaultyifSOC_AU1X00

#more:

defaultPCI

(3)修改drivers/usb/host/下ohci-hcd.c文件

添加

#ifdefCONFIG_ARCH_S3C2410

#include"ohci-s3c2410.c"

#endif

修改

#if!

(defined(CONFIG_PCI)\

||defined(CONFIG_SA1111)\

||defined(CONFIG_ARCH_OMAP)\

||defined(CONFIG_ARCH_LH7A404)\

||defined(CONFIG_ARCH_S3C2410)\

||defined(CONFIG_PXA27x)\

||defined(CONFIG_SOC_AU1X00)\

#error"missingbusglueforohci-hcd"

#endif

(4)修改arch/arm/mach-s3c2410/mach-smdk2410.c

添加如下内容

#include

#include

#include

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1