【vfp开源代码栏目提醒】:网学会员,鉴于大家对vfp开源代码十分关注,论文会员在此为大家搜集整理了“linux内核移植-共同成长 - 经营企划”一文,供大家参考学习!
Tiny6410 的内核移植拿来主义 一、 环境 环境 fedoral13 编译器友善自带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-gt/usr/4.5.1/bin/arm-linux- Cross-compiler tool prefix 我将编译器解压到了/opt/Friendly/ toolschain/4.5.1/bin目录如果第三步中以修改“CROSS.complier arm-linux- ”此项这步可以不作 System Type-gt MINI6410 选上其他的可以去掉不确定的可以参考友善之臂的这样编译出来的内核是可以被uboot引导的然后是增加nand flash支持 vi arch/arm/mach-s3c64xx/mach-mini6410.c 第117行 struct mtd_partition mini6410_nand_part .name quotBootloaderquot .offset 0 .size 4 128 SZ_1K .mask_flags MTD_CAP_NANDFLASH .name quotKernelquot .offset 4 128 SZ_1K .size 5SZ_1M .mask_flags MTD_CAP_NANDFLASH .name quotFile Systemquot .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 2gt/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---gt ltgt Memory Technology Device MTD support ---gt MTD partitioning support Command line partition table parsing ltgt Direct char device access to MTD devices ltgt Caching block device access to MTD devices ltgt NAND Device Support ---gt lt gt NAND Flash support for Samsung S3C SoCs 去掉不要选 ltgt 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后生成的内核文件在/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 quotubi0:FriendlyARM-rootquot or unknown-block00 Please append a correct quotrootquot 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-block00 ltc002bc04gt unwind_backtrace0x0/0xe4 from ltc01aca28gt panic0x50/0x16c ltc01aca28gt panic0x50/0x16c from ltc0008ea8gt mount_block_root0x238/0x288 ltc0008ea8gt mount_block_root0x238/0x288 from ltc00090e0gt prepare_namespace0x88/0x1b4 ltc00090e0gt prepare_namespace0x88/0x1b4 from ltc0008b2cgt kernel_init0x108/0x148 ltc0008b2cgt kernel_init0x108/0x148 from ltc0027508gt kernel_thread_exit0x0/0x8 OK //在此卡住不动了 其中红色部分表示找不着系统文件因为tiny6410 的系统文件为ubifs格式所以下面我们要将ubifs系统文件驱动移植到内核中 三、 移植UBIFS驱动 1. 配置内核支持UBIFS Device Drivers ---gt Memory Technology Device MTD support ---gt UBI - Unsorted block images ---gt Enable UBI 2. 配置mtd支持UBI接口 File systems ---gt Miscellaneous filesystems ---gt UBIFS file system support 3. 再次Make make 4. 下载到开发板 如果成功如下图: 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 quotFriendlyARM-rootquot 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: cant 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: cant open /sys/class/net/eth0/address: No such file or directory ifconfig: socket: Function not implemented route: socket: Function not implemented Done 此时ifconfig等命令不能用以及lcd 四、 移植网卡驱动 1. 修改的dm9000网卡头文件 vi include/linux/dm9000.h 28行增加 unsigned char param_addr6 2. 修改dm9000的驱动文件 vi drivers/net/dm9000.c 大概1586行 将mac_src quotplatform dataquot memcpyndev-gtdev_addr pdata-gtdev_addr 6 改成 mac_src quotparam dataquot memcpyndev-gtdev_addr pdata-gtparam_addr 6 大概1598行 增加 if is_valid_ether_addrndev-gtdev_addr ampamp pdata NULL mac_src quotplatform dataquot memcpyndev-gtdev_addr pdata-gtdev_addr 6 修改后如下图: if is_valid_ether_addrndev-gtdev_addr ampamp pdata NULL //hai-modified if 0 mac_src quotplatform dataquot memcpyndev-gtdev_addr pdata-gtdev_addr 6 endif mac_src quotparam dataquot memcpyndev-gtdev_addr pdata-gtparam_addr 6 // //hai-added if is_valid_ether_addrndev-gtdev_addr ampamp pdata NULL mac_src quotplatform dataquot memcpyndev-gtdev_addr pdata-gtdev_addr 6 // 3. 再次配置内核 make menuconfig Networking support ---gt Networking options ---gt ltgt Packet socket ltgt Unix domain sockets TCP/IP networking IP: kernel level autoconfiguration IP: DHCP support IP: BOOTP support IP: RARP support Device Drivers ---gt Network device support ---gt Ethernet 10 or 100Mbit ---gt ltgt DM9000 support Ethernet 1000 Mbit ---gt 去掉 4. 执行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 5. 下载到开发板 如果成功如下图: hwclock: cant 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 pid965 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屏驱动 1. 增加行如果用vi/gedit命令打不开或出现乱码则可能是解压文件错误请重新减压 vi arch/arm/plat-samsung/include/plat/map-base.h 第39行增加 define S3C_VA_LCD S3C_ADDR0x01100000 / LCD / 2. 复制 从友善的源码中将arch/arm/mach-s3c64xx/include/mach/regs-lcd.h拷贝过来 从友善的源码中将drivers/video/samsung整个文件夹拷贝过来 cp -arf 友善samsung路径 目的samsung路径 3. 增加行 1 vi drivers/video/Kconfig 第2368行增加 source quotdrivers/video/samsung/Kconfigquot 2 vi drivers/video/Makefile 120行增加 obj-CONFIG_FB_S3C_EXT samsung/ 3 vi arch/arm/mach-s3c64xx/mach-mini6410.c 48行增加 include ltlinux/delay.hgt 191行mini6410_lcd_power_set函数里的内容改成 if power gpio_direction_outputS3C64XX_GPF13 1 //GPF13是USBpower用的与lcd无关 gpio_direction_outputS3C64XX_GPF15 1 //GPF15是是真正的一线控制线连PWM1 / fire nRESET on power up / gpio_direction_outputS3C64XX_GPN5 0 //GPN5好像与lcd也无关先copy吧 msleep10 gpio_direction_outputS3C64XX_GPN5 1 msleep1 else gpio_direction_outputS3C64XX_GPF15 0 gpio_direction_outputS3C64XX_GPF13 0 190行增加函数-------------default_bpp 16 的后面增加结构体 static struct map_desc mini6410_lcd_iodesc / LCD support / .virtual unsigned longS3C_VA_LCD .pfn __phys_to_pfnS3C_PA_FB .length SZ_16K .type MT_DEVICE 将mini6410_map_io这个函数中的一个函数引用改成如下。
s3c64xx_init_iomini6410_lcd_iodesc ARRAY_SIZEmini6410_lcd_iodesc 378行增加 gpio_requestS3C64XX_GPN5 quotLCD powerquot gpio_requestS3C64XX_GPF13 quotLCD powerquot 去掉gpio_requestS3C64XX_GPE0 quotLCD powerquot 4. make menuconfig Power management options ---gt Power Management support 一定要去掉不然会有drivers/video/samsung/s3cfb_fimd4x.c:1440:2: error: implicit declaration of function s3c6410_pm_do_save的错误。
Device Drivers ---gt Graphics support ---gt ltgt Support for frame buffer devices ---gt lt gt Samsung S3C framebuffer support ltgt S3C Framebuffer Support eXtended Select LCD Type 4.3 inch 480x272 TFT LCD ---gt ltgt Advanced options for S3C Framebuffer Select BPPBits Per Pixel 16 BPP ---gt 4 Number of Framebuffers ctrllt-修改 Enable Virtual Screen NEW Enable Double Buffering //这个找不到但是此为双缓冲 也可以不选择编译仍然可以通过。
Backlight amp LCD device support ---gt Console display driver support ---gt ltgt Framebuffer Console support 这个也一定要选不然会有drivers/built-in.o:.data0x174: undefined reference to soft_cursor的错误、 Bootup logo ---gt 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 Window0 - FB1: map_video_memory: clear ff600000:0007f800 FB1: map_video_memory: dma5d780000 cpuff600000 size0007f800 Window0 - FB2: map_video_memory: clear ff63fc00:0003fc00 FB2: map_video_memory: dma5d7bfc00 cpuff63fc00 size0003fc00 Console: switching to colour frame buffer device 60x34 fb0: s3cfb frame buffer device Window1 - FB1: map_video_memory: clear ff680000:0007f800 FB1: map_video_memory: dma5cc00000 cpuff680000 size0007f800 Window1 - FB2: map_video_memory: clear ff6bfc00:0003fc00 FB2: map_video_memory: dma5cc3fc00 cpuff6bfc00 size0003fc00 fb1: s3cfb frame buffer device Window2 - FB1: map_video_memory: clear ff700000:0003fc00 FB1: map_video_memory: dma5d740000 cpuff700000 size0003fc00 fb2: s3cfb frame buffer device Window3 - FB1: map_video_memory: clear ff740000:0003fc00 FB1: map_video_memory: dma5cc80000 cpuff740000 size0003fc00 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缩进。
错误如rootsyd168 linux-2.6.38.des make menuconfig scripts/kconfig/mconf Kconfig drivers/input/touchscreen/Kconfig:204: unknown option quotmodulequot make1: menuconfig Error 1 make: menuconfig Error 2 rootsyd168 linux-2.6.38.des gedit drivers/input/touchscreen/Kconfig config TOUCHSCREEN_MINI6410 tristate quotS3C touchscreen driver for Mini6410quot depends on ARCH_S3C2410 ARCH_S3C64XX ARCH_S5P64XX ARCH_S5PC1XX default 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 TOUCH.
上一篇:
fmpeg+编
下一篇:
关于大学英语教学