




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Tiny6410 的内核移植(拿来主义) 开发环境宿主机: vista+VMware+ fedoral13(win7下虚拟机)编译器: 友善自带arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz开发板: tiny6410,核心板号1106 NAND 2G RAM 256M注意:移植内核时,确保引导文件为u-boot类型,否则到后面下载到开发板使会出现乱码以及不必要的错误移植nand_flash1 下载linux-2.6.38的源码/pub/linux/kernel/v2.6/linux-2.6.38.tar.bz22 解压 #tar xvfj /mnt/ubuntu/linux-2.6.38.tar.bz2 -C .3 修改根下的Makefile#vi Makefile191行改为ARCH ?= armCROSS_COMPILE?= arm-linux- (找到其交叉编译环境)4 生成默认配置文件#cp arch/arm/configs/s3c6400_defconfig .config(如果省略的话,后面会找不到System Type)5 修改配置项(基本配置)#make menuconfigGeneral setup-(/usr/4.5.1/bin/arm-linux-) Cross-compiler tool prefix我将编译器解压到了/opt/Friendly/ toolschain/4.5.1/bin目录(如果第三步中以修改“CROSS.complier ? = arm-linux- ”此项,这步可以不作)System Type-* MINI6410 选上,其他的可以去掉,不确定的可以参考友善之臂的(这样编译出来的内核是可以被uboot引导的,然后是增加nand flash支持)vi arch/arm/mach-s3c64xx/mach-mini6410.c第117行struct mtd_partition mini6410_nand_part = .name= Bootloader,.offset= 0,.size= (4 * 128 *SZ_1K),.mask_flags= MTD_CAP_NANDFLASH,.name= Kernel,.offset= (4 * 128 *SZ_1K),.size = (5*SZ_1M) ,.mask_flags = MTD_CAP_NANDFLASH,.name= File System,.offset= MTDPART_OFS_APPEND,.size= MTDPART_SIZ_FULL,; /update at 2011-8-26 经过测试发现,这里改完后根本不起作用,甚至将整个注释也无妨,估计分区已经固死在后面的s3c_nand_mlc.fo中6 拷贝NAND FLASH驱动 (将6410内核中的如下文件拷到相应的目录下)需拷贝文件: drivers/mtd/nand/s3c_nand.c arch/arm/plat-samsung/include/plat/regs-nand.h 覆盖掉 drivers/mtd/nand/s3c_nand_mlc.fo s3c_nand_mlc.fo友善没有开源的一个驱动之一,所以不用研究了,拷过来就是了。 drivers/mtd/nand/nand_base.c覆盖掉 当然如果想手动修改的话见附件1 drivers/mtd/nand/Kconfig 覆盖掉 详细请见附件27 drivers/mtd/nand/Makefile中20行增加 obj-$(CONFIG_MTD_NAND_S3C)+= s3c_nand.o末尾再增加S3C_NAND_MLC_SRC = $(shell ls drivers/mtd/nand/s3c_nand_mlc.c 2/dev/null)ifeq ($(S3C_NAND_MLC_SRC),)obj-$(CONFIG_MTD_NAND_S3C)+= s3c_nand_mlc.foelseobj-$(CONFIG_MTD_NAND_S3C)+= s3c_nand_mlc.oendif这步要是不愿意改的话,直接拷贝覆盖即可覆盖掉8 然后再make menuconfigDevice Drivers- Memory Technology Device (MTD) support- * MTD partitioning support* Command line partition table parsing Direct char device access to MTD devices Caching block device access to MTD devices NAND Device Support- NAND Flash support for Samsung S3C SoCs去掉不要选 NAND Flash support for S3C SoC* S3C NAND Hardware ECC9 编译Make如果顺利通过则出现如下信息:OBJCOPY arch/arm/boot/Image Kernel: arch/arm/boot/Image is ready AS arch/arm/boot/compressed/head.o GZIP arch/arm/boot/compressed/piggy.gzip AS arch/arm/boot/compressed/piggy.gzip.o CC arch/arm/boot/compressed/misc.o CC arch/arm/boot/compressed/decompress.o SHIPPED arch/arm/boot/compressed/lib1funcs.S AS arch/arm/boot/compressed/lib1funcs.o LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready Building modules, stage 2. MODPOST 16 modules10 下载到开发板Make后生成的内核文件(zimage)在/arch/arm/boot/ 下。将其共享或者通过其他方式放到window下并将开发板与pc连接利用dns工具下载至开发板,按b重起开发板,测试内核是否正确编译、移植。此时可能出现如下问题:usbcore: registered new interface driver usbhidusbhid: USB HID core driverVFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5drivers/rtc/hctosys.c: unable to open rtc device (rtc0)VFS: Cannot open root device ubi0:FriendlyARM-root or unknown-block(0,0)Please append a correct root= boot option; here are the available partitions:1f00 4096 mtdblock0 (driver?)1f01 8192 mtdblock1 (driver?)1f02 2084864 mtdblock2 (driver?)Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) (unwind_backtrace+0x0/0xe4) from (panic+0x50/0x16c) (panic+0x50/0x16c) from (mount_block_root+0x238/0x288) (mount_block_root+0x238/0x288) from (prepare_namespace+0x88/0x1b4) (prepare_namespace+0x88/0x1b4) from (kernel_init+0x108/0x148) (kernel_init+0x108/0x148) from (kernel_thread_exit+0x0/0x8)OK/在此卡住不动了 其中红色部分表示找不着系统文件,因为tiny6410 的系统文件为ubifs格式,所以下面我们要将ubifs系统文件驱动移植到内核中移植UBIFS驱动配置内核支持UBIFSDevice Drivers -Memory Technology Device (MTD) support -UBI - Unsorted block images -Enable UBI配置mtd支持UBI接口File systems -Miscellaneous filesystems -UBIFS file system support 再次Make#make下载到开发板如果成功,如下图:usbcore: registered new interface driver usbhidusbhid: USB HID core driverVFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5drivers/rtc/hctosys.c: unable to open rtc device (rtc0)mmc0: mmc_rescan_try_freq: trying to init card at 300000 Hzmmc0: mmc_rescan_try_freq: trying to init card at 200000 HzUBIFS: recovery neededusb 1-1: new full speed USB device using s3c2410-ohci and address 2mmc0: mmc_rescan_try_freq: trying to init card at 100000 HzUBIFS: recovery completedUBIFS: mounted UBI device 0, volume 0, name FriendlyARM-rootUBIFS: file system size: 2061287424 bytes (2012976 KiB, 1965 MiB, 1997 LEBs)UBIFS: journal size: 12517376 bytes (12224 KiB, 11 MiB, 13 LEBs)UBIFS: media format: w4/r0 (latest is w4/r0)UBIFS: default compressor: lzoUBIFS: reserved for root: 0 bytes (0 KiB)VFS: Mounted root (ubifs filesystem) on device 0:10.hwclock: cant open /dev/misc/rtc: No such file or directory01/Jan/1970:00:00:18 +0000 boa.c:173 - unable to create socket: Function not implemented open device leds: No such file or directory/usr/sbin/alsactl: load_state:1610: No soundcards found. ifconfig: socket: Function not implementedTry to bring eth0 interface up.cat: cant open /sys/class/net/eth0/address: No such file or directoryifconfig: socket: Function not implementedroute: socket: Function not implementedDone(此时ifconfig等命令不能用,以及lcd)移植网卡驱动修改的dm9000网卡头文件#vi include/linux/dm9000.h28行增加unsigned char param_addr6;修改dm9000的驱动文件#vi drivers/net/dm9000.c大概1586行将mac_src = platform data;memcpy(ndev-dev_addr, pdata-dev_addr, 6);改成 mac_src = param data; memcpy(ndev-dev_addr, pdata-param_addr, 6);大概1598行增加 if (!is_valid_ether_addr(ndev-dev_addr) & pdata != NULL) mac_src = platform data; memcpy(ndev-dev_addr, pdata-dev_addr, 6); 修改后如下图:if (!is_valid_ether_addr(ndev-dev_addr) & pdata != NULL) /=hai-modified=#if 0mac_src = platform data;memcpy(ndev-dev_addr, pdata-dev_addr, 6);#endif mac_src = param data; memcpy(ndev-dev_addr, pdata-param_addr, 6);/= /=hai-added= if (!is_valid_ether_addr(ndev-dev_addr) & pdata != NULL) mac_src = platform data; memcpy(ndev-dev_addr, pdata-dev_addr, 6); /=再次配置内核#make menuconfig * Networking support - Networking options - Packet socket Unix domain sockets * TCP/IP networking * IP: kernel level autoconfiguration * IP: DHCP support * IP: BOOTP support * IP: RARP support Device Drivers - * Network device support - * Ethernet (10 or 100Mbit) - DM9000 support Ethernet (1000 Mbit) - 去掉执行make编译#make如果顺利便利,结果会有如下信息:OBJCOPY arch/arm/boot/Image Kernel: arch/arm/boot/Image is ready GZIP arch/arm/boot/compressed/piggy.gzip AS arch/arm/boot/compressed/piggy.gzip.o SHIPPED arch/arm/boot/compressed/lib1funcs.S AS arch/arm/boot/compressed/lib1funcs.o LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready Building modules, stage 2. MODPOST 26 modules下载到开发板如果成功,如下图:hwclock: cant open /dev/misc/rtc: No such file or directory01/Jan/1970:00:00:18 +0000 boa: server version Boa/0.94.1301/Jan/1970:00:00:18 +0000 boa: server built Dec 30 2010 at 11:18:35.01/Jan/1970:00:00:18 +0000 boa: starting server pid=965, port 80 open device leds: No such file or directory/usr/sbin/alsactl: load_state:1610: No soundcards found. Try to bring eth0 interface up.eth0: link downDone(此时网卡驱动已移植成功)移植lcd屏驱动增加行(如果用vi/gedit命令打不开或出现乱码则可能是解压文件错误,请重新减压)vi arch/arm/plat-samsung/include/plat/map-base.h 第39行增加#define S3C_VA_LCD S3C_ADDR(0x01100000)/* LCD */复制从友善的源码中将arch/arm/mach-s3c64xx/include/mach/regs-lcd.h拷贝过来从友善的源码中将drivers/video/samsung整个文件夹拷贝过来复制文件方法:#cp -arf 友善samsung路径 目的samsung路径增加行vi drivers/video/Kconfig第2368行增加source drivers/video/samsung/Kconfigvi drivers/video/Makefile120行增加obj-$(CONFIG_FB_S3C_EXT)+= samsung/vi arch/arm/mach-s3c64xx/mach-mini6410.c48行增加#include 191行mini6410_lcd_power_set函数里的内容改成if (power) gpio_direction_output(S3C64XX_GPF(13), 1); /GPF13是USBpower用的,与lcd无关 gpio_direction_output(S3C64XX_GPF(15), 1); /GPF15是是真正的一线控制线连PWM1/* fire nRESET on power up */gpio_direction_output(S3C64XX_GPN(5), 0); /GPN5好像与lcd也无关,先copy吧msleep(10);gpio_direction_output(S3C64XX_GPN(5), 1);msleep(1); else gpio_direction_output(S3C64XX_GPF(15), 0);gpio_direction_output(S3C64XX_GPF(13), 0);190行增加函数-default_bpp = 16, 的后面增加结构体:static struct map_desc mini6410_lcd_iodesc = /* LCD support */ .virtual = (unsigned long)S3C_VA_LCD, .pfn = _phys_to_pfn(S3C_PA_FB), .length = SZ_16K, .type = MT_DEVICE, ,;将mini6410_map_io()这个函数中的一个函数引用改成如下。s3c64xx_init_io(mini6410_lcd_iodesc, ARRAY_SIZE(mini6410_lcd_iodesc);378行增加gpio_request(S3C64XX_GPN(5), LCD power);gpio_request(S3C64XX_GPF(13), LCD power);去掉gpio_request(S3C64XX_GPE(0), LCD power);#make menuconfigPower management options- Power Management support 一定要去掉,不然会有drivers/video/samsung/s3cfb_fimd4x.c:1440:2: error: implicit declaration of function s3c6410_pm_do_save的错误。Device Drivers -Graphics support - Support for frame buffer devices- Samsung S3C framebuffer supportS3CFramebufferSupport (eXtended)Select LCD Type (4.3 inch 480x272 TFT LCD)- Advanced options for S3C FramebufferSelect BPP(Bits Per Pixel) (16 BPP)-(4) Number of Framebuffers(ctrl+Console display driver support- Framebuffer Console support这个也一定要选,不然会有drivers/built-in.o:(.data+0x174): undefined reference to soft_cursor的错误、* Bootup logo- Standard black and white Linux logo Standard 16-color Linux logo* Standard 224-color Linux logo 其他的默认就行这时lcd的驱动其实已经移植好了,引导信息也正常,如S3C_LCD clock got enabled : 133.000 MhzLCD TYPE : N43 will be initializedWindow0 - FB1: map_video_memory: clear ff600000:0007f800FB1: map_video_memory: dma=5d780000 cpu=ff600000 size=0007f800Window0 - FB2: map_video_memory: clear ff63fc00:0003fc00FB2: map_video_memory: dma=5d7bfc00 cpu=ff63fc00 size=0003fc00Console: switching to colour frame buffer device 60x34fb0: s3cfb frame buffer deviceWindow1 - FB1: map_video_memory: clear ff680000:0007f800FB1: map_video_memory: dma=5cc00000 cpu=ff680000 size=0007f800Window1 - FB2: map_video_memory: clear ff6bfc00:0003fc00FB2: map_video_memory: dma=5cc3fc00 cpu=ff6bfc00 size=0003fc00fb1: s3cfb frame buffer deviceWindow2 - FB1: map_video_memory: clear ff700000:0003fc00FB1: map_video_memory: dma=5d740000 cpu=ff700000 size=0003fc00fb2: s3cfb frame buffer deviceWindow3 - FB1: map_video_memory: clear ff740000:0003fc00FB1: map_video_memory: dma=5cc80000 cpu=ff740000 size=0003fc00fb3: s3cfb frame buffer device但lcd屏却没有反应,百思不得其解。后来终于发现了,过程明天在说一线触摸的驱动移植1从友善的配套内核中复制一下文件到新内核的对应文件夹:arch/arm/mach-s3c64xx/dev-ts-mini6410.carch/arm/mach-s3c64xx/include/mach/ts.harch/arm/plat-samsung/include/plat/regs-adc.h /覆盖drivers/input/touchscreen/mini6410_1wire_host.cdrivers/input/touchscreen/mini6410-ts.cdrivers/input/touchscreen/ts-if.c到相应目录2修改文件arch/arm/mach-s3c64xx/Makefile vi arch/arm/mach-s3c64xx/Makefile 末尾增加 obj-$(CONFIG_TOUCHSCREEN_MINI6410)+= dev-ts-mini6410.o3. 修改文件drivers/input/touchscreen/Makefilevi drivers/input/touchscreen/Makefile末尾加入obj-$(CONFIG_TOUCHSCREEN_MINI6410)+= mini6410-ts.oobj-$(CONFIG_TOUCHSCREEN_1WIRE)+= mini6410_1wire_host.oobj-$(CONFIG_FB_S3C_EXT_TFT800480)+= ts-if.oobj-$(CONFIG_FB_S3C_EXT_TFT480272)+= ts-if.oobj-$(CONFIG_FB_S3C_EXT_X240320)+= ts-if.o4. 修改drivers/input/touchscreen/Kconfigvi drivers/input/touchscreen/Kconfig190行左右加入(在190行左右config TOUCHSCREEN_S3C2410的配置项后面加入如下代码(菜单项):注意!下面有缩进行当最左边的缩进至少需要一个TAB缩进。错误如:rootsyd168 linux-2.6.38.des# make menuconfigscripts/kconfig/mconf Kconfigdrivers/input/touchscreen/Kconfig:204: unknown option modulemake1: * menuconfig Error 1make: * menuconfig Error 2rootsyd168 linux-2.6.38.des# gedit drivers/input/touchscreen/Kconfig#=hai=config TOUCHSCREEN_MINI6410tristate S3C touchscreen driver for Mini6410depends on ARCH_S3C2410 | ARCH_S3C64XX | ARCH_S5P64XX | ARCH_S5PC1XXdefault y help Say Y here to enable the driver for the touchscreen on the FriendlyARM Mini6410 development board. If unsure, say N. To compile this driver as a module, choose M here: the module will be called mini6410-ts.config TOUCHSCREEN_1WIREtristate Mini6410 1-Wire host and Touch Screen Driverdepends on MACH_MINI6410help Say Y here to enable the 1-Wire host and Touch Screen driver for FriendlyARM Mini6410 development board. If unsure, say N. To compile this driver as a module, choose M here: the module will be called mini6410_1wire_host.#=修改文件arch/arm/mach-s3c64xx/mach-mini6410.c vi arch/arm/mach-s3c64xx/mach-mini6410.c44行 将#include 改成#include 320行将static struct s3c2410_ts_mach_info s3c_ts_platform _initdata = .delay= 10000,.presc= 49,.oversampling_shift = 2,;改成static struct s3c_ts_mach_info s3c_ts_platform _initdata = .delay= 0xFFFF,.presc= 0xFF,.oversampling_shift = 2,.resol_bit= 12,.s3c_adc_con= ADC_TYPE_2,;436行将s3c24xx_ts_set_platdata(&s3c_ts_platform);改成 s3c_ts_set_platdata(&s3c_ts_platform);修改文件arch/arm/plat-samsung/Makefilevi arch/arm/plat-samsung/Makefile60行注释掉obj-$(CONFIG_SAMSUNG_DEV_TS) += dev-ts.o不然会有multiple definition of s3c_device_ts的错误很奇怪,友善的源码CONFIG_SAMSUNG_DEV_TS=n,而我的源码出来后CONFIG_SAMSUNG_DEV_TS=y,还改不掉。错误:arch/arm/plat-samsung/built-in.o:(.data+0x1b08): multiple definition of s3c_device_tsarch/arm/mach-s3c64xx/built-in.o:(.data+0x36b8): first defined heremake: * vmlinux.o Error 1修改drivers/input/touchscreen/mini6410-ts.cvi drivers/input/touchscreen/mini6410-ts.c增加头文件#include奇怪的是友善的mini6410-ts.c里没这个头文件也能找到需要的东西。配置内核#make menuconfigDevice Drivers - Input device support- * Touchscreens- S3C touchscreen driver for Mini6410 Mini6410 1-Wire host and Touch Screen Driver .即除了mini6410外,都不选!System Type - AMD6400 A&W6410* MINI6410REAL6410SMDK6410=General setup -*system v IPV支持进程通信 此时就可以进入界面了重新编译内核并测试#make 错误提示arch/arm/mach-s3c64xx/built-in.o: In function smdk6410_machine_init:/opt/FriendlyARM/mini6410/linux/kenel/linux-2.6.38.des/arch/arm/mach-s3c64xx/mach-smdk6410.c:673: undefined reference to s3c24xx_ts_set_platdataarch/arm/mach-s3c64xx/built-in.o: In function smartq_machine_init:/opt/FriendlyARM/mini6410/linux/kenel/linux-2.6.38.des/arch/arm/mach-s3c64xx/mach-smartq.c:387: undefined reference to s3c24xx_ts_set_platdatamake: * .tmp_vmlinux1 Error 1 正确信息如下:OBJCOPY arch/arm/boot/Image Ker
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年反担保合同编制指南:标的及履约责任落实
- 2025峨眉山路小学食堂废弃物处理与物业管理服务协议
- 诸子百家思想比较
- 诸城市环保知识培训课件
- 2025合同终止协议解除流程是怎样的
- 2025兽药网络店铺转让合同协议书
- 语文知识与能力培训课件
- 红血丝知识培训课件
- 新能源行业2025年储能电池安全防护技术创新与产业布局报告
- 红楼梦批注式阅读课件
- 2025法拍房屋代理竞买合同范本:专业中介服务
- 2025年中级银行从业资格之中级风险管理真题及答案详解(基础+提升)
- 数控加工程序管理办法
- 2025年综合类-农艺师考试-农艺师考试-园艺工考试-高级花卉工考试历年真题摘选带答案(5卷100题)
- 小学六年级综合实践环境保护计划
- 联邦学习框架下的设备故障智能诊断算法研究
- 婚内财产协议模板
- 中国钼金属行业市场调查报告
- 物业追缴奖励方案(3篇)
- 华为公司组织管理制度
- 2025年中国蛋白肽市场现状分析及前景预测报告
评论
0/150
提交评论