收藏 分销(赏)

tiny6410内核移植.doc

上传人:pc****0 文档编号:7236930 上传时间:2024-12-28 格式:DOC 页数:32 大小:342.50KB 下载积分:10 金币
下载 相关 举报
tiny6410内核移植.doc_第1页
第1页 / 共32页
tiny6410内核移植.doc_第2页
第2页 / 共32页


点击查看更多>>
资源描述
Tiny6410 的内核移植(拿来主义) 开发环境 宿主机: vista+VMware+ fedoral13(win7下虚拟机) 编译器: 友善自带arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz 开发板: tiny6410,核心板号1106 NAND 2G RAM 256M 注意:移植内核时,确保引导文件为u-boot类型,否则到后面下载到开发板使会出现乱码以及不必要的错误 移植nand_flash 1 下载linux-2.6.38的源码 ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2 2 解压 #tar xvfj /mnt/ubuntu/linux-2.6.38.tar.bz2 -C . 3 修改根下的Makefile #vi Makefile    191行改为    ARCH ?= arm CROSS_COMPILE ?= arm-linux- (找到其交叉编译环境) 4 生成默认配置文件 #cp arch/arm/configs/s3c6400_defconfig .config (如果省略的话,后面会找不到System Type) 5 修改配置项(基本配置) #make menuconfig General 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 覆盖掉 详细请见附件2 7 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.fo else obj-$(CONFIG_MTD_NAND_S3C)            += s3c_nand_mlc.o endif 这步要是不愿意改的话,直接拷贝覆盖即可覆盖掉 8 然后再make menuconfig   Device 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 ECC 9 编译 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 modules 10 下载到开发板 Make后生成的内核文件(zimage)在/arch/arm/boot/ 下。将其共享或者通过其他方式放到window下并将开发板与pc连接利用dns工具下载至开发板,按b重起开发板,测试内核是否正确编译、移植。 此时可能出现如下问题: usbcore: registered new interface driver usbhid usbhid: USB HID core driver VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5 drivers/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) [<c002bc04>] (unwind_backtrace+0x0/0xe4) from [<c01aca28>] (panic+0x50/0x16c) [<c01aca28>] (panic+0x50/0x16c) from [<c0008ea8>] (mount_block_root+0x238/0x288) [<c0008ea8>] (mount_block_root+0x238/0x288) from [<c00090e0>] (prepare_namespace+0x88/0x1b4) [<c00090e0>] (prepare_namespace+0x88/0x1b4) from [<c0008b2c>] (kernel_init+0x108/0x148) [<c0008b2c>] (kernel_init+0x108/0x148) from [<c0027508>] (kernel_thread_exit+0x0/0x8) OK //在此卡住不动了 其中红色部分表示找不着系统文件,因为tiny6410 的系统文件为ubifs格式,所以下面我们要将ubifs系统文件驱动移植到内核中 移植UBIFS驱动 配置内核支持UBIFS Device 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 usbhid usbhid: USB HID core driver VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5 drivers/rtc/hctosys.c: unable to open rtc device (rtc0) mmc0: mmc_rescan_try_freq: trying to init card at 300000 Hz mmc0: mmc_rescan_try_freq: trying to init card at 200000 Hz UBIFS: recovery needed usb 1-1: new full speed USB device using s3c2410-ohci and address 2 mmc0: mmc_rescan_try_freq: trying to init card at 100000 Hz UBIFS: recovery completed UBIFS: mounted UBI device 0, volume 0, name "FriendlyARM-root" UBIFS: 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: lzo UBIFS: reserved for root: 0 bytes (0 KiB) VFS: Mounted root (ubifs filesystem) on device 0:10. hwclock: can't open '/dev/misc/rtc': No such file or directory [01/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 implemented Try to bring eth0 interface up......cat: can't open '/sys/class/net/eth0/address': No such file or directory ifconfig: socket: Function not implemented route: socket: Function not implemented Done (此时ifconfig等命令不能用,以及lcd) 移植网卡驱动 修改的dm9000网卡头文件 #vi include/linux/dm9000.h 28行增加 unsigned char param_addr[6]; 修改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 0 mac_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: can't open '/dev/misc/rtc': No such file or directory [01/Jan/1970:00:00:18 +0000] boa: server version Boa/0.94.13 [01/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 down Done(此时网卡驱动已移植成功) 移植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/Kconfig" vi drivers/video/Makefile 120行增加 obj-$(CONFIG_FB_S3C_EXT)      += samsung/ vi arch/arm/mach-s3c64xx/mach-mini6410.c 48行增加 #include <linux/delay.h> 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 menuconfig   Power 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 support                              <*> S3CFramebufferSupport (eXtended)                   Select LCD Type (4.3 inch 480x272 TFT LCD)  --->                    <*>   Advanced options for S3C Framebuffer                                        Select BPP(Bits Per Pixel) (16 BPP)  --->                        (4)   Number of Framebuffers                (ctrl+<-修改)                          [ ]       Enable Virtual Screen (NEW)                                     [*]       Enable Double Buffering     //这个找不到,但是此为双缓冲, 也可以不选择,编译仍然可以通过。            [ ] Backlight & LCD device support  --->   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 Mhz LCD TYPE :: N43 will be initialized Window[0] - FB1: map_video_memory: clear ff600000:0007f800             FB1: map_video_memory: dma=5d780000 cpu=ff600000 size=0007f800 Window[0] - FB2: map_video_memory: clear ff63fc00:0003fc00             FB2: map_video_memory: dma=5d7bfc00 cpu=ff63fc00 size=0003fc00 Console: switching to colour frame buffer device 60x34 fb0: s3cfb frame buffer device Window[1] - FB1: map_video_memory: clear ff680000:0007f800             FB1: map_video_memory: dma=5cc00000 cpu=ff680000 size=0007f800 Window[1] - FB2: map_video_memory: clear ff6bfc00:0003fc00             FB2: map_video_memory: dma=5cc3fc00 cpu=ff6bfc00 size=0003fc00 fb1: s3cfb frame buffer device Window[2] - FB1: map_video_memory: clear ff700000:0003fc00             FB1: map_video_memory: dma=5d740000 cpu=ff700000 size=0003fc00 fb2: s3cfb frame buffer device Window[3] - FB1: map_video_memory: clear ff740000:0003fc00             FB1: map_video_memory: dma=5cc80000 cpu=ff740000 size=0003fc00 fb3: s3cfb frame buffer device 但lcd屏却没有反应,百思不得其解。后来终于发现了,过程明天在说 一线触摸的驱动移植 1.从友善的配套内核中复制一下文件到新内核的对应文件夹: arch/arm/mach-s3c64xx/dev-ts-mini6410.c arch/arm/mach-s3c64xx/include/mach/ts.h arch/arm/plat-samsung/include/plat/regs-adc.h //覆盖 drivers/input/touchscreen/mini6410_1wire_host.c drivers/input/touchscreen/mini6410-ts.c drivers/input/touchscreen/ts-if.c 到相应目录 2.修改文件arch/arm/mach-s3c64xx/Makefile vi arch/arm/mach-s3c64xx/Makefile 末尾增加 obj-$(CONFIG_TOUCHSCREEN_MINI6410)  += dev-ts-mini6410.o 3. 修改文件drivers/input/touchscreen/Makefile vi drivers/input/touchscreen/Makefile 末尾加入 obj-$(CONFIG_TOUCHSCREEN_MINI6410)    += mini6410-ts.o obj-$(CONFIG_TOUCHSCREEN_1WIRE)        += mini6410_1wire_host.o obj-$(CONFIG_FB_S3C_EXT_TFT800480)    += ts-if.o obj-$(CONFIG_FB_S3C_EXT_TFT480272)    += ts-if.o obj-$(CONFIG_FB_S3C_EXT_X240320)    += ts-if.o 4. 修改drivers/input/touchscreen/Kconfig vi drivers/input/touchscreen/Kconfig 190行左右加入(在190行左右config TOUCHSCREEN_S3C2410的配置项后面加入如下代码(菜单项): 注意!!!下面有缩进行当最左边的缩进至少需要一个TAB缩进。 错误如:[root@syd168 linux-2.6.38.des]# make menuconfig scripts/kconfig/mconf Kconfig drivers/input/touchscreen/Kconfig:204: unknown option "module" make[1]: *** [menuconfig] Error 1 make: *** [menuconfig] Error 2 [root@syd168 linux-2.6.38.des]# gedit drivers/input/touchscreen/Kconfig #=============hai================ config TOUCHSCREEN_MINI6410 tristate "S3C touchscreen driver for Mini6410" depe
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服