DM6446-linux-2.6.18移植.docx_第1页
DM6446-linux-2.6.18移植.docx_第2页
DM6446-linux-2.6.18移植.docx_第3页
DM6446-linux-2.6.18移植.docx_第4页
DM6446-linux-2.6.18移植.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Davinci DM6446开发攻略linux-2.6.18移植TI DAVINCI 使用最新的内核是montavista linux-2.6.18,之前说过,国内很多公司,包括开发板的软件包,一直在使用montavista linux-2.6.10,这个版本准确来说是比较低的,实时性肯定没2.6.18好(MontaVista Linux Professional Edition 5.0以linux-2.6.18为基础,打破了Linux不适用于实时和嵌入式应用的迷思);使用devfs,没有使用udev;对DM365等新出的DAVINCI芯片支持限度很小;ucLibc支持(减少75%应用程序资源需求);IPv6(增加更多Internet Protocol version 6 (IPv6)支持,提供比旧版产品更优异的效能、安全和管理功能);等等,这些优点不得不让人心动。第一步:简化linux-2.6.18如果你已经安装好TI mvl_5_0_0_demo_lsp_setuplinux_02_00_00_140.bin,先在你的工作目录下建立linux-2.6.18_pro500的目录,进入改目录,比如/home/ dm6446/linux-2.6.18_pro500/,COPY内核源代码到本目录下,命令如下:cp r /opt/mv_pro_5.0.0/montavistapro/devkit/lsp/ti-davinci/linux-2.6.18_pro500/* .(注意”*” ”.”之间的空格)和UBOOT移植一样,我们先把一些不相关的平台给删除掉,进入arch目录,保留arm目录,其他全部删除掉。进入linux-2.6.18_pro500/arch/arm/,保留boot,common,configs,kernel,lib,mach-davinci,mm,nwfpe,oprofile,plat-mxc,plat-omap,tools,vfp和其他4个文件Kconfig,Makefile, Kconfig-nommu, Kconfig.debug,其他有关mach-xxxx的全部删除掉。删除include下不相关平台的文件夹:asm-alpha,asm-arm26,asm-cris,asm-frv,asm-h8300,asm-i386,asm-ia64,asm-m32r,asm-m68k,asm-m68knommu,asm-mips,asm-parisc,asm-powerpc,asm-ppc,asm-ppc64,asm-s390,asm-sh,asm-sh64,asm-sparc,asm-sparc64,asm-um,asm-v850,asm-x86_64,asm-xtensa全部删除掉,其他就不用删了,否则出问题。第二步:建立交叉编译环境 进行下面工作之前,确保你的GCC已经按DAVINCI DM6446开发攻略环境搭建篇建立好。1、 顶层Makefile修改:在172行,即# make CROSS_COMPILE=ia64-linux-下面,加入:ARCH = arm CROSS_COMPILE = arm_v5t_le-把下面:ARCH := $(shell if -f .mvl_target_cpu ; then cat .mvl_target_cpu; else echo $(SUBARCH); fi)CROSS_COMPILE = $(shell if -f .mvl_cross_compile ; then cat .mvl_cross_compile; fi)全部注释掉;2、 COPY UBOOT 的mkimage工具从编译好的UBOOT里tool目录下的mkimage工具COPY到linux-2.6.18_pro500目录以下,3、 添加mkzImage.sh使用vi生成mkzImage.sh,把以下内容加入文件: #!/bin/sh./mkimage -n linux-2.6.18 -A arm -O linux -T kernel -C none -a 0x80008000 -e 0x80008040 -d zImage davinci_kernel.binchmod 777 davinci_kernel.bincp -f davinci_kernel.bin /tftpboot保存在linux-2.6.18_pro500/目录下,配合mkimage,方便把zImage转换成davinci_kernel.bin,这样UBOOT才能把linux kernel给BOOT起来;4、 修改arch/arm/boot/Makefile:在57行下面加入:cp -f arch/arm/boot/zImage zImage这样每次编译zImage,生成的zImage可以自动COPY到linux-2.6.18_pro500目录下。5、 修改fs/hostfs/Makefile 因为删除um和asm-um,当使用make distclean操作的时候会出现问题,所以把:include arch/um/scripts/Makefile.rules注释掉。6、 修改arch/arm/Kconfig因为删除其他不相关的平台的文件夹,所以Kconfig也把这些平台给注释掉:从135行开始一直到343行#config ARCH_AAEC2000# bool Agilent AAEC-2000 based# select ARM_AMBA# help# This enables support for systems based on the Agilent AAEC-2000。#config ARCH_OMAP# bool TI OMAP# help# Support for TIs OMAP platform (OMAP1 and OMAP2).以上全部注释掉。从第355行开始到399行,全部注释掉:#source arch/arm/mach-clps711x/Kconfig#source arch/arm/mach-ep93xx/Kconfig。#source arch/arm/mach-netx/Kconfig第三步:内核移植裁减1、 在linux-2.6.18_pro500目录下,使用以下命令开始配置内核:cp arch/arm/configs/ davinci_dm644x_defconfig .configmake menuconfig进入熟悉的kernel配置界面:2、 去掉ATA DRIVER由于本人的开发板没有NOR FLASH,也没有ATA硬盘之类的东西,这一点和TI EVM板不一样,所以我们先把设备驱动里的ATA选项去掉。然后保存配置退出,使用Make zImage编译完后,运行./mkzImage.sh,可以COPY生成的bin文件到/tftpboot目录下,参照上篇有关uboot的帖子,使板子把uboot运行起来,使用进入UBOOT命令行:U-Boot tftp 80008000 davinci_kernel.binU-Boot bootm 80008000之后可以在串口终端看到内核的运行信息。3、 修改arch/arm/mach-davinc/board-evm.c有关dm644x的平台信息就在board-evm.c里,包括nand flash 分区配置,管脚复用配置,psc初始化等等。在74行,把有关nor flash的代码全部注释掉,在static struct platform_device *davinci_evm_devices _initdata = &serial_device,#if defined(CONFIG_MTD) | defined(CONFIG_MTD_MODULE)/&davinci_evm_flash_device,#endif#if defined(CONFIG_MTD_NAND_DAVINCI) | defined(CONFIG_MTD_NAND_DAVINCI_MODULE)&davinci_nand_device,#endif&rtc_dev,&davinci_fb_device,#if defined(CONFIG_BLK_DEV_PALMCHIP_BK3710) | defined(CONFIG_BLK_DEV_PALMCHIP_BK3710_MODULE)&davinci_ide_device,#endif#if defined(CONFIG_MMC_DAVINCI) | defined(CONFIG_MMC_DAVINCI_MODULE)&mmc0_device,#endif;把nor flash的设备驱动注释掉;对nand flash进行分区,这个要和UBOOT烧写UBOOT KERNEL ROOTFS等烧写的地址一一对应;static struct mtd_partition davinci_nand_partitions = /* bootloader (U-Boot, etc) in first sector */ /*Mtdblock0*/ .name = bootloader, .offset = 0, .size = SZ_1M+SZ_512K, .mask_flags = 0, /* force read-only */,/* bootloader params in the next sector */ /*Mtdblock1*/ .name = dspcore, .offset = SZ_1M+SZ_512K, .size = (SZ_8M-SZ_2M-SZ_512K), .mask_flags = 0, /* force read-only */,(这里注明一下:mtdblock1源代码被定义为128K参数,但是在UBOOT里,我们把参数放在0x0000开始的地址,这里可以保留该分区,也可以不要。本人定义成DSP BIN文件存放的地方,有种调试方式可以不用KERNEL就可以在UBOOT把DSP BOOT起来,双核并行运行嘛。这个分区在本人这里是拿来测试DSP程序,一般不建议使用UBOOT方式把DSP给BOOT起来。这个DSP BIN就是通过HEX64工具生成的,这和DM642、DM6437的BIN文件完全一样。具体说,把DSP程序运行起来常用有四种方法,一是硬件BOOT方式选择DSP BOOT,二是通过UBOOT把BIN启动起来,三是通过内核把BIN启动起来,四是DSP SERVER方式,即*.x64P,就是最常用的Codec Engine机制。第三种方式也有很多公司在用,然后通过共享内存方式、中断等实现双核通信。)/* kernel */ /*Mtdblock2*/ .name = kernel, .offset = (SZ_8M-SZ_1M), .size = SZ_4M+SZ_1M, .mask_flags = 0,/* file system */ /*Mtdblock3*/ .name = rootfs, .offset = (SZ_8M+SZ_4M), .size = SZ_64M, .mask_flags = 0,/* data */ /*Mtdblock4*/ 这个可以保存一些备份数据,一可以不用定义 .name = data, .offset = (SZ_64M+SZ_8M+SZ_4M), .size = (SZ_128M-(SZ_64M+SZ_8M+SZ_4M), .mask_flags = MTD_WRITEABLE,;以上是NAND 分区信息,针对各自板子不同大小的NAND FLASH,合理分配空间。#if 1static struct platform_device rtc_dev = .name = pcf8563,.id = -1,;#elsestatic struct platform_device rtc_dev = .name = rtc_davinci_evm,.id = -1,;#endif以上的代码修改,表示板子采用pcf8563 时钟芯片作为RTC设备,本人的板子不采用TI-EVM的电路,所以要修改这里,同时在drivers/rtc目录下,修改rtc-pcf8563.c的一个BUG,就是:static unsigned short normal_i2c = 0x51, I2C_CLIENT_END ;一定要加0x51地址,否则内核运行时,无法注册pcf8563的驱动,会出现RTC错误信息,很多网友都碰都过这个问题。改完后,make menuconfig要选上pcf8563的驱动。在static void dm644x_setup_pinmux(unsigned int id)里,把有关FPGA接口的管脚复用功能去掉,因为很多中低端DM6446产品都没有接FPGA芯片。这样我们可以把这些引脚定义成SPI核UART接口。#if 0case DAVINCI_LPSC_VLYNQ: davinci_cfg_reg(DM644X_VLINQEN); davinci_cfg_reg(DM644X_VLINQWD); break;#endif同时在arch/arm/mach-davinci/mux_cfg.c里struct pin_config _initdata_or_module davinci_dm644x_pins = /* description mux mode mode mux dbg* reg offset mask mode*/#if 1 /ATA功能不用MUX_CFG(HDIREN, 0, 16, 1, 0, 1)MUX_CFG(ATAEN, 0, 17, 1, 0, 1)#elseMUX_CFG(HDIREN, 0, 16, 1, 1, 1)MUX_CFG(ATAEN, 0, 17, 1, 1, 1)#endifMUX_CFG(MSTK, 1, 9, 1, 0, 0)MUX_CFG(I2C, 1, 7, 1, 1, 0)MUX_CFG(MCBSP, 1, 10, 1, 1, 0)MUX_CFG(PWM0, 1, 4, 1, 1, 0)MUX_CFG(PWM1, 1, 5, 1, 1, 0)MUX_CFG(PWM2, 1, 6, 1, 1, 0)#if 0MUX_CFG(VLINQEN, 0, 15, 1, 1, 0)MUX_CFG(VLINQWD, 0, 12, 3, 3, 0)#endifMUX_CFG(EMACEN, 0, 31, 1, 1, 1)MUX_CFG(GPIO3V, 0, 31, 1, 0, 1)MUX_CFG(GPIO0, 0, 24, 1, 0, 1)MUX_CFG(GPIO3, 0, 25, 1, 0, 0)MUX_CFG(GPIO43_44, 1, 7, 1, 0, 0)MUX_CFG(GPIO46_47, 0, 22, 1, 0, 1)MUX_CFG(RGB666, 0, 22, 1, 1, 1)/*MUX_CFG(RGB888, 0, 23, 1, 1, 1)*/ /* for vpbe rgb888*/MUX_CFG(LOEEN, 0, 24, 1, 1, 1)MUX_CFG(LFLDEN, 0, 25, 1, 1, 0);4、 内核进一步配置对内核进一步配置之前,如果对linux-2.6.18很陌生,这里给出一个链接:/u2/71415/showart_1018029.html一个网友对 “Linux 2.6.19.x 内核编译配置“进行详细的描述,不妨去看一下。使用cp arch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论