乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Davinci DM6446開(kāi)發(fā)攻略——linux

       NFC_HXW 2013-10-10
      Davinci DM6446開(kāi)發(fā)攻略——linux-2.6.18移植
      2010-03-17 01:27:58
      原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章 原始出處 、作者信息和本聲明。否則將追究法律責(zé)任。http://zjbintsystem.blog.51cto.com/964211/284468
          TI DAVINCI 使用最新的內(nèi)核是montavista linux-2.6.18,之前說(shuō)過(guò),國(guó)內(nèi)很多公司,包括開(kāi)發(fā)板的軟件包,一直在使用montavista linux-2.6.10,這個(gè)版本準(zhǔn)確來(lái)說(shuō)是比較低的,實(shí)時(shí)性肯定沒(méi)2.6.18好(MontaVista Linux Professional Edition 5.0linux-2.6.18為基礎(chǔ),打破了Linux不適用于實(shí)時(shí)和嵌入式應(yīng)用的迷思);使用devfs,沒(méi)有使用udev;對(duì)DM365等新出的DAVINCI芯片支持限度很小;ucLibc支持(減少75%應(yīng)用程序資源需求);IPv6(增加更多Internet Protocol version 6 (IPv6)支持,提供比舊版產(chǎn)品更優(yōu)異的效能、安全和管理功能);等等,這些優(yōu)點(diǎn)不得不讓人心動(dòng)。
       
      第一步:簡(jiǎn)化linux-2.6.18
      如果你已經(jīng)安裝好TI mvl_5_0_0_demo_lsp_setuplinux_02_00_00_140.bin,先在你的工作目錄下建立linux-2.6.18_pro500的目錄,進(jìn)入改目錄,比如/home/<useraccount>\ dm6446/linux-2.6.18_pro500/COPY內(nèi)核源代碼到本目錄下,命令如下:
      cp –r /opt/mv_pro_5.0.0/montavista\pro/devkit/lsp/ti-davinci/linux-2.6.18_pro500/* .
      (注意*” ”.之間的空格)
      UBOOT移植一樣,我們先把一些不相關(guān)的平臺(tái)給刪除掉,進(jìn)入arch目錄,保留arm目錄,其他全部刪除掉。
      進(jìn)入linux-2.6.18_pro500/arch/arm/保留boot,common,configs,kernellib,mach-davinci,mmnwfpe,oprofile,plat-mxc,plat-omap,toolsvfp和其他4個(gè)文件Kconfig,Makefile, Kconfig-nommu, Kconfig.debug,其他有關(guān)mach-xxxx的全部刪除掉。
       
      刪除include下不相關(guān)平臺(tái)的文件夾:asm-alpha,asm-arm26,asm-cris,asm-frv,asm-h8300,asm-i386asm-ia64,asm-m32r,asm-m68k,asm-m68knommu,asm-mipsasm-parisc,asm-powerpc,asm-ppc,asm-ppc64,asm-s390,asm-sh,asm-sh64asm-sparc,asm-sparc64asm-um,asm-v850,asm-x86_64,asm-xtensa全部刪除掉,其他就不用刪了,否則出問(wèn)題。
       
      第二步:建立交叉編譯環(huán)境
       
          進(jìn)行下面工作之前,確保你的GCC已經(jīng)按《DAVINCI DM6446開(kāi)發(fā)攻略——環(huán)境搭建篇》建立好。
      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工具
      從編譯好的UBOOTtool目錄下的mkimage工具COPYlinux-2.6.18_pro500目錄以下,
      3、  添加mkzImage.sh
      使用vi生成mkzImage.sh,把以下內(nèi)容加入文件:
          #!/bin/sh
       
      ./mkimage -n 'linux-2.6.18' -A arm -O linux -T kernel -C none -a 0x80008000 -e 0x80008040 -d zImage davinci_kernel.bin
      chmod 777 davinci_kernel.bin
      cp -f davinci_kernel.bin /tftpboot
       
      保存在linux-2.6.18_pro500/目錄下,配合mkimage,方便把zImage轉(zhuǎn)換成davinci_kernel.bin,這樣UBOOT才能把linux kernelBOOT起來(lái);
      4、  修改arch/arm/boot/Makefile
      57行下面加入:
      @cp -f arch/arm/boot/zImage zImage
      這樣每次編譯zImage,生成的zImage可以自動(dòng)COPYlinux-2.6.18_pro500目錄下。
      5、  修改fs/hostfs/Makefile
         因?yàn)閯h除umasm-um,當(dāng)使用make distclean操作的時(shí)候會(huì)出現(xiàn)問(wèn)題,所以把:
      include arch/um/scripts/Makefile.rules注釋掉。
      6、  修改arch/arm/Kconfig
      因?yàn)閯h除其他不相關(guān)的平臺(tái)的文件夾,所以Kconfig也把這些平臺(tái)給注釋掉:
      135行開(kāi)始一直到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 TI's OMAP platform (OMAP1 and OMAP2).
      以上全部注釋掉。
      從第355行開(kāi)始到399行,全部注釋掉:
      #source "arch/arm/mach-clps711x/Kconfig"
       
      #source "arch/arm/mach-ep93xx/Kconfig"
       
      。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
       
      #source "arch/arm/mach-netx/Kconfig"
       
      第三步:內(nèi)核移植裁減
       
      1、  linux-2.6.18_pro500目錄下,使用以下命令開(kāi)始配置內(nèi)核:
      cp arch/arm/configs/ davinci_dm644x_defconfig .config
      make menuconfig
      進(jìn)入熟悉的kernel配置界面:
       
      2、  去掉ATA DRIVER
      由于本人的開(kāi)發(fā)板沒(méi)有NOR FLASH,也沒(méi)有ATA硬盤之類的東西,這一點(diǎn)和TI EVM板不一樣,所以我們先把設(shè)備驅(qū)動(dòng)里的ATA選項(xiàng)去掉。
      然后保存配置退出,使用
      Make zImage
      編譯完后,運(yùn)行./mkzImage.sh,可以COPY生成的bin文件到/tftpboot目錄下,參照上篇有關(guān)uboot的帖子,使板子把uboot運(yùn)行起來(lái),使用進(jìn)入UBOOT命令行:
      U-Boot >tftp 80008000 davinci_kernel.bin
      U-Boot >bootm 80008000
      之后可以在串口終端看到內(nèi)核的運(yùn)行信息。
      3、  修改arch/arm/mach-davinc/board-evm.c
      有關(guān)dm644x的平臺(tái)信息就在board-evm.c里,包括nand flash 分區(qū)配置,管腳復(fù)用配置,psc初始化等等。
      74行,把有關(guān)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的設(shè)備驅(qū)動(dòng)注釋掉;
      對(duì)nand flash進(jìn)行分區(qū),這個(gè)要和UBOOT燒寫UBOOT KERNEL ROOTFS等燒寫的地址一一對(duì)應(yīng);
      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參數(shù),但是在UBOOT里,我們把參數(shù)放在0x0000開(kāi)始的地址,這里可以保留該分區(qū),也可以不要。本人定義成DSP BIN文件存放的地方,有種調(diào)試方式可以不用KERNEL就可以在UBOOTDSP BOOT起來(lái),雙核并行運(yùn)行嘛。這個(gè)分區(qū)在本人這里是拿來(lái)測(cè)試DSP程序,一般不建議使用UBOOT方式把DSP給BOOT起來(lái)。這個(gè)DSP BIN就是通過(guò)HEX64工具生成的,這和DM642、DM6437BIN文件完全一樣。具體說(shuō),把DSP程序運(yùn)行起來(lái)常用有四種方法,一是硬件BOOT方式選擇DSP BOOT,二是通過(guò)UBOOTBIN啟動(dòng)起來(lái),三是通過(guò)內(nèi)核把BIN啟動(dòng)起來(lái),四是DSP SERVER方式,即*.x64P,就是最常用的Codec Engine機(jī)制。第三種方式也有很多公司在用,然后通過(guò)共享內(nèi)存方式、中斷等實(shí)現(xiàn)雙核通信。)
      /* 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*/ 這個(gè)可以保存一些備份數(shù)據(jù),一可以不用定義
      {
              .name             = "data",
              .offset    = (SZ_64M+SZ_8M+SZ_4M),
              .size        = (SZ_128M-(SZ_64M+SZ_8M+SZ_4M)),
              .mask_flags = MTD_WRITEABLE,
      }
      };
      以上是NAND 分區(qū)信息,針對(duì)各自板子不同大小的NAND FLASH,合理分配空間。
      #if 1
      static struct platform_device rtc_dev = {
      .name            = "pcf8563",
      .id          = -1,
      };
      #else
      static struct platform_device rtc_dev = {
      .name             = "rtc_davinci_evm",
      .id          = -1,
      };
      #endif
      以上的代碼修改,表示板子采用pcf8563 時(shí)鐘芯片作為RTC設(shè)備,本人的板子不采用TI-EVM的電路,所以要修改這里,同時(shí)在drivers/rtc目錄下,修改rtc-pcf8563.c的一個(gè)BUG,就是:
      static unsigned short normal_i2c[] = { 0x51, I2C_CLIENT_END };
      一定要加0x51地址,否則內(nèi)核運(yùn)行時(shí),無(wú)法注冊(cè)pcf8563的驅(qū)動(dòng),會(huì)出現(xiàn)RTC錯(cuò)誤信息,很多網(wǎng)友都碰都過(guò)這個(gè)問(wèn)題。改完后,make menuconfig要選上pcf8563的驅(qū)動(dòng)。
       
      static void dm644x_setup_pinmux(unsigned int id)里,把有關(guān)FPGA接口的管腳復(fù)用功能去掉,因?yàn)楹芏嘀械投?/span>DM6446產(chǎn)品都沒(méi)有接FPGA芯片。這樣我們可以把這些引腳定義成SPIUART接口。
      #if 0
      case DAVINCI_LPSC_VLYNQ:
              davinci_cfg_reg(DM644X_VLINQEN);
              davinci_cfg_reg(DM644X_VLINQWD);
              break;
      #endif
      同時(shí)在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)
      #else
      MUX_CFG("HDIREN",        0,   16,    1,      1, 1)
      MUX_CFG("ATAEN",          0,   17,    1,      1, 1)
      #endif
      MUX_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 0
      MUX_CFG("VLINQEN",             0,   15,    1,      1, 0)
      MUX_CFG("VLINQWD",            0,   12,    3,      3, 0)
      #endif
      MUX_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、  內(nèi)核進(jìn)一步配置
      對(duì)內(nèi)核進(jìn)一步配置之前,如果對(duì)linux-2.6.18很陌生,這里給出一個(gè)鏈接:
      一個(gè)網(wǎng)友對(duì) Linux 2.6.19.x 內(nèi)核編譯配置“進(jìn)行詳細(xì)的描述,不妨去看一下。
      使用cp arch/arm/configs/ davinci_dm644x_defconfig .config
      make menuconfig
      進(jìn)入內(nèi)核配置界面,在這里,本人只對(duì)要修改的地方進(jìn)行分析,其他設(shè)置,保留davinci_dm644x_defconfig。上面已經(jīng)介紹有關(guān)去掉ATATI-EVM RTC設(shè)備,接著我們對(duì)文件系統(tǒng)進(jìn)行裁減,如下圖。圖下半部沒(méi)有顯示,保留davinci_dm644x_defconfig就可以了,一般不要修改。NFS文件系統(tǒng)的配置也用默認(rèn)的,直接編譯就可以了。
      其他功能和驅(qū)動(dòng),建議保留默認(rèn)配置。對(duì)于自己板子新的設(shè)備(和TI-EVM板差別很大),則要做更復(fù)雜的移植工作,包括相應(yīng)目錄的makefileKconfig文件的修改等,這里不再累贅。
       
      第四步:保存?zhèn)浞菪薷暮蟮呐渲?/span>
       
      內(nèi)核移植配置,一定要養(yǎng)成備份配置文件的良好習(xí)慣,一步一個(gè)腳印,防止做重復(fù)工作。幸好davinci_dm644x_defconfig給大家提供一個(gè)很好的參考,否則更加麻煩。直接從內(nèi)核網(wǎng)站下載最新內(nèi)核來(lái)移植,那是非常大的挑戰(zhàn),不是一般人為的。Linux-2.6.18也許有很多設(shè)備沒(méi)有支持,但在較新的linux內(nèi)核上有,這也可以把新的驅(qū)動(dòng)移植下來(lái),這個(gè)工作量也不小,當(dāng)然也有簡(jiǎn)單的patch,那是后話。
      按照上篇UBOOT的介紹,設(shè)置好參數(shù),比如使用NFS:
      mem=120M console=ttyS0,115200n8 noinitrd rw ip=dhcp root=/dev/nfs nfsroot=192.168.1.251:/home/<useraccount>/nfs/tirootfs,nolock
      測(cè)試內(nèi)核和NFS文件系統(tǒng)。
      以上工作已經(jīng)通過(guò)本人的板子驗(yàn)證,有不足的地方,大家可以博客留言共同討論。
       

      本文出自 “集成系統(tǒng)-踏上文明的征程” 博客,請(qǐng)務(wù)必保留此出處http://zjbintsystem.blog.51cto.com/964211/284468

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多