免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1559 | 回复: 0
打印 上一主题 下一主题

内核(2.6.14) + 根文件系统 + Qt4 移植 for S3C2410 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-06 20:29 |只看该作者 |倒序浏览
/*********************************************************/
LarryChan   阿牛哥(亮)   
chenliang_43@sina.com
   
http://blog.sina.com.cn/mimimomoll
2008.5.7. 桂林电子科技大学 正平科技馆机器人中心
衷心感谢所有对本文有所帮助的人。本文仅供交流,无意侵权
/*********************************************************/

TARGET
CPU:   S3C2410X
SDRAM: HY57V561620(32MB) × 2
FLASH: K9F1208(64MB)
NET:   CS8900
HOST
Linux Realse Version: Fecora Core 6
CrossCompiler: gcc-4.1.1/arm-linux-gcc-3.4.1



一、内核移植(2.6.14)
1   修改linux2.6.14下面的makefile文件
    找到ARCH和CROSS_COMPILE,修改
    ARCH ?= arm
    CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux-  
(此处为你交叉编译的路径)

2  设置flash分区
    在arch/arm/machs3c2410/devs.c文件中添加头文件
    #include
    #include
    #include   
    然后建立分区表
    /* 一个Nand Flash总共64MB, 按如下大小进行分区 分区大小自己看着办*/
    static struct mtd_partition partition_info[] ={
        { /* 1MB */
            name: "bootloader",
            size: 0x00100000,
            offset: 0x0,
        },{ /* 3MB */
            name: "kernel",
            size: 0x00300000,
            offset: 0x00100000,
        }, { /* 40MB */
            name: "root",
            size: 0x02800000,
            offset: 0x00400000,
        }, { /* 20MB */
        name: "user",
        size: 0x00f00000,
        offset: 0x02d00000,
        }
    };

    /*加入Nand Flash分区*/
    struct s3c2410_nand_set nandset ={
    nr_partitions: 4, /*指明partition_info中定义的分区数目*/
    partitions: partition_info, /* partition table分区信息表*/
    };

    /*建立Nand Flash芯片支持*/
    struct s3c2410_platform_nand superlpplatform={
        tacls:0,
        twrph0:30,
        twrph1:0,
        sets: &nandset,
        nr_sets: 1,
    };
    tacls, twrph0, twrph1的意思见S3C2410手册的63,
    这3个值最后会被设置到NFCONF中,见S3C2410手册66.
    sets: 支持的分区集        nr_set:分区集的个数
   
    /*加入Nand Flash芯片支持到Nand Flash驱动
    另外,还要修改此文件中的s3c_device_nand结构体变量,添加对dev成员的赋值*/
    struct platform_device s3c_device_nand = {
        .name = "s3c2410-nand",
            /* Device name */
        .id = -1,
            /* Device ID */
        .num_resources = ARRAY_SIZE(s3c_nand_resource),
        .resource = s3c_nand_resource, /* Nand Flash Controller Registers */
            /* Add the Nand Flash device */
        .dev = {
        .platform_data = &superlpplatform
        }
    };
    指定启动时初始化
    arch/arm/machs-3c2410/mach-smdk2410.c文件
    找到platform_device *smdk2410_devices[] __initdata
函数,在该函数体最后加上一条语句:
    &s3c_device_nand,

    禁用禁止Flash ECC校验(有不同说法)
    修改drivers/mtd/nand/s3c2410.c
    找到chip->eccmode = NAND_ECC_SOFT;
    改为chip->eccmode = NAND_ECC_NONE;
   
    支持启动挂载devfs
    修改fs/Kconfig文件  
    找到menu "Pseudo filesystems" 添加
    config DEVFS_FS
        bool "/dev file system support (OBSOLETE)"
        default y

    config DEVFS_MOUNT
        bool "Automatically mount at boot"
        default y
        depends on DEVFS_FS

3   Yaffs2文件系统支持
下载yaffs2.tar.gz源码包,解压源码,并进入目录执行
#./patch-ker.sh c /linux-2.6.14.1/
注:假定内核源码在/linux-2.6.14.1/

4   编译配置内核,首先先load一个默认的内核/linux-2.6.14/arch/arm/configs/
smdk2410_defconfig,在这个配置文件上改
    Loadable module support >
        
  • Enable loadable module support
                
  • Automatic kernel module loading

        System Type >
            
  • S3C2410 DMA support

        Boot options >
            Default kernel command string:
            noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200

        Floating point emulation >
            
  • NWFPE math emulation

        Device Drivers >
            Memory Technology Devices (MTD) >
                
  • MTD partitioning support
                    #支持MTD分区,这样我们在前面设置的分区才有意义
                
  • Command line partition table parsing
                    #支持从命令行设置flash分区信息,灵活
                RAM/ROM/Flash chip drivers >
                     Detect flash chips by Common Flash Interface (CFI) probe
                     Detect nonCFI AMD/JEDECcompatible flash chips
                     Support for Intel/Sharp flash chips
                     Support for AMD/Fujitsu flash chips
                     Support for ROM chips in bus mapping
                NAND Flash Device Drivers >
                     NAND Device Support
                     NAND Flash support for S3C2410/S3C2440 SoC
            
    Character devices >
                
  • Nonstandard serial port support
                
  • S3C2410 RTC Driver

        File systems >
             Second extended fs support #去除对ext2的支持
            Pseudo filesystems >
                
  • /proc file system support
                
  • Virtual memory file system support (former shm fs)
                
  • /dev file system support (OBSOLETE)
                
  • Automatically mount at boot (NEW)
                    #这里会看到我们前先修改fs/Kconfig的成果,devfs已经被支持上了
            Miscellaneous filesystems >
                 Compressed ROM file system support (cramfs) #支持cramfs
                 YAFFS2 file system support                  #支持yaffs2
            Network File Systems >
                 NFS file system support

    二、CS8900网卡驱动的移植
    1   cs8900.c和cs8900.h放到/drivers/net/arm/

    2   在cs8900.c中的cs8900_probe()函数中,memset (&priv,0,sizeof (cs8900_t));
    函数之后添加如下两条语句:
        __raw_writel(0x2211d110,S3C2410_BWSCON);
        __raw_writel(0x1f7c,S3C2410_BANKCON3);  
        添加头文件#include

    3   修改drivers/net/arm/目录下的Kconfig文件,在最后添加如下内容:
        config ARM_CS8900
       tristate "CS8900 support"
            depends on NET_ETHERNET && ARM && ARCH_SMDK2410
        help

    4   修改drivers/net/arm/目录下的Makefile文件,在最后添加如下内容:
        obj-$(CONFIG_ARM_CS8900)    += cs8900.o

    5   在/arch/arm/mach-s3c2410/mach-smdk2410.c文件中,找到smdk2410_iodesc[]
    结构数组,添加如下如下内容:{vSMDK2410_ETH_IO, 0x19000000, SZ_1M, MT_DEVICE}
        添加头文件#inlcude   
    其实这个就是下面的那个头文件的链接/include/asm-arm/arch-s3c2410/smdk2410.h

    6   在include/asm-arm/arch-s3c2410/目录下创建smdk2410.h文件,其内容为:
        #ifndef _INCLUDE_SMDK2410_H_
        #define _INCLUDE_SMDK2410_H_
        #include
        #define pSMDK2410_ETH_IO   0x19000000
        #define vSMDK2410_ETH_IO   0xE0000000
        #define SMDK2410_ETH_IRQ   IRQ_EINT9
        #endif // _INCLUDE_SMDK2410_H_  

    7   编译内核,选中所装驱动
        #make menuconfig
    Device Drivers >
           Network device support  --->  
                Ethernet (10 or 100Mbit) --->
                   
  • Ethernet (10 or 100Mbit)
                    CS8900 support

    三、LCD驱动移植
    1   在arch/arm/mach-s3c2410/mach-smdk2410.c中添加
    //lcd
    #include
    #include
    //-------------------------------------------lcd
    static struct s3c2410fb_mach_info s3c2410_lcd_info __initdata = {
                  .fixed_syncs = 0,
                  .regs = {
                  //对于寄存器的设置是关键,可参考S3C2410X的手册
                  //和LCD技术手册中对于LCD技术指标的描述来进行设置。
                  //其中,寄存器值的宏定义在regs-lcd.h文件中。
    /*
                         .lcdcon1 = S3C2410_LCDCON1_TFT16BPP
    | S3C2410_LCDCON1_TFT | S3C2410_LCDCON1_CLKVAL(1),
                         .lcdcon2 = S3C2410_LCDCON2_VBPD(32)
    | S3C2410_LCDCON2_VFPD(9) | S3C2410_LCDCON2_VSPW(1),
                         .lcdcon3 = S3C2410_LCDCON3_HBPD(47)
    | S3C2410_LCDCON3_HFPD(15),
                         .lcdcon4 = S3C2410_LCDCON4_MVAL(13)
    | S3C2410_LCDCON4_HSPW(95),
                         .lcdcon5 = S3C2410_LCDCON5_FRM565
    | S3C2410_LCDCON5_INVVLINE | S3C2410_LCDCON5_HWSWP
    | S3C2410_LCDCON5_PWREN | S3C2410_LCDCON5_INVVFRAME,
    */
                .lcdcon1 = S3C2410_LCDCON1_TFT16BPP
                | S3C2410_LCDCON1_TFT | S3C2410_LCDCON1_CLKVAL(1),
                .lcdcon2 = S3C2410_LCDCON2_VBPD(1)
                | S3C2410_LCDCON2_VFPD(2) | S3C2410_LCDCON2_VSPW(1),
                .lcdcon3 = S3C2410_LCDCON3_HBPD(6)
                | S3C2410_LCDCON3_HFPD(2),
                .lcdcon4 = S3C2410_LCDCON4_MVAL(13)
                | S3C2410_LCDCON4_HSPW(4),
                .lcdcon5 = S3C2410_LCDCON5_FRM565
                | S3C2410_LCDCON5_INVVLINE | S3C2410_LCDCON5_HWSWP
                | S3C2410_LCDCON5_PWREN | S3C2410_LCDCON5_INVVFRAME,
                  },
                  .lpcsel = 0x0,
                  .gpccon = 0xaaaaaaaa,
                  .gpccon_mask = 0xffffffff,
                  .gpcup = 0xffffffff,
                  .gpcup_mask = 0xffffffff,
                  .gpdcon = 0xaaaaaaaa,
                  .gpdcon_mask = 0x0,
                  .gpdup = 0xffffffff,
                  .gpdup_mask = 0xffffffff,
                  .width = 640,
                  .height = 480,
                  .xres = {640,640,640},
                  .yres = {480,480,480},
                  .bpp = {16,16,16},
    };
    static void __init smdk2410_lcd_init(void)
    {
                  set_s3c2410fb_info(&s3c2410_lcd_info);
    }
    3   在文件最后MACHINE_END之前添加
    .init_machine = smdk2410_lcd_init,

    4   编译内核,选中所装驱动
    #make menuconfig
    Device Drivers >
           Graphics support  --->  
                 support for frame buffer devices
                 S3C2410 LCD framebuffer support
                    Logo configuration  --->  //开机画面的选择,可据个人需要更改
                        
  • Bootup logo
                        
  • Standard 224-color linux logo

    5   开机画面的选择
    首先把要开机Logo图片(png格式)放在linux2.6.14文件中的 drivers/video/logo
    中,终端选择进入drivers/video/logo目录,进行以下操作:
    (假设开机图片名为linux.png)
    # pngtopnm  linux.png  >  linuxlogo.pnm
    # pnmquant 224 linuxlogo.pnm  >  linuxlogo224.pnm
    # pnmtoplainpnm  linuxlogo224.pnm  >  linuxlogo224.ppm
    # mv  linuxlogo224.ppm  logo_linux_clut224.ppm  //替换原来的启动文件

    四、USB驱动移植
    1   在arch/arm/mach-s3c2410/mach-smdk2410.c中紧接着LCD的部分添加
    //usb
    #include
    #include
    #include
    #include

    //-------------------------------------------------usb
    struct s3c2410_hcd_info usb_s3c2410_info = {
                  .port[0] = {
                         .flags = S3C_HCDFLG_USED
                  }
    };
    int smdk2410_usb_init(void) /* USB */
    {
                  unsigned long upllvalue = (0x78
                  printk("USB Control, (c) 2006 s3c2410\n");
                  s3c_device_usb.dev.platform_data = &usb_s3c2410_info;
                  while(upllvalue!=__raw_readl(S3C2410_UPLLCON))
                  { __raw_writel(upllvalue,S3C2410_UPLLCON);
                         mdelay(1);
                 }
                  return 0;
    }

    2   在smdk2410_map_io函数最后添加
    smdk2410_usb_init();

    3   编译内核,选中所装驱动,配置USB鼠标键盘
    #make menuconfig
    Device Drivers >
           USB support  --->  
                 Support for Host-side USB
                 OHCI HCD support
    --- USB Input Devices
    USB Human Interface Devices (full HID) support
  • HID input layer support

    五、配置U盘支持
    因为要优盘用到了SCSI 命令,所以我们先增加SCSI 支持。
    在Device Drivers 菜单里面,选择SCSI device support
    #make menuconfig
    Device Drivers >
           SCSI device support  --->  
                
  • legacy /proc/scsi support
    SCSI disk support
    然后选择返回Device Drivers 菜单,再选择 USB support,按回车进入USB
    support菜单找到并选中
    Device Drivers >
                USB support  --->
    USB Mass Storage support
                   
  •      USB Mass Storage verbose debug

    六、配置USB摄像头
    #make menuconfig
    Device Drivers >
           Multimedia device  --->
    Video for Linux
    Video for Linux---> 选中其中两个选项
    然后选择返回Device Drivers 菜单,再选择 USB support,按回车进入USB
    support菜单找到并选中

    Device Drivers >
                USB support  --->
    USB OV511 Camera support
    USB SE401 Camera support

    七、配置SD/MMC卡驱动 (不确定)
    #make menuconfig
    Device Drivers >
           MMC/SD Card support  --->  
    MMC support
  • MMC debugging
    MMC block device driver

    八、根文件系统制作(Busybox1.9.2)
    1   建一个目录rootfs用来装文件系统

    2   # mkdir bin dev etc home lib mnt proc root sbin tmp usr var
        # mkdir usr/bin usr/sbin
    # mkdir mnt tmp var
    # chmod 1777 tmp
    # mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
    # mkdir var/lib var/lock var/log var/run var/tmp
    # chmod 1777 var/tmp
    # mkdir home root boot

    3   到系统 /dev 把所有的device打一个包,拷贝到 dev
    下面(最省事的做法);或者使用mknod来自己建所需要的device,
    举例:
    # mknod -m 600 dev/console c 5 1
    # mknod -m 666 dev/null c 1 3

    4   应用程序定制
    标准的Linux
    发行版本具有功能种类比较多的应用程序,这些应用程序占用的空间也很大,这对存储容?
    靠占溆邢薜目??謇此稻筒皇抢硐氲难≡瘢?谇度胧娇?⒐?讨校??S肂usyBox
    来定制应用程序。BusyBox具有shell
    的功能,它能提供系统所需要的大部分工具,包括编辑工具、网络工具、模块加载工具、?
    顾踅庋顾豕ぞ摺⒉檎夜ぞ摺⒄屎琶苈牍芾砉ぞ吆徒?滔喙毓ぞ叩取?
    目前BusyBox的最新版本是BusyBox-1.9.2版本,下载解压,切换到BusyBox的
    根目录下,修改Makefile,找到ARCH和CROSS COMPILE修改如下:
    ARCH ?= arm
    CROSS_COMPILE ?=/usr/local/arm/3.4.1/bin/arm-linux-

    5   修改编译配置选项。
    #make defconfig
    #make menuconfig
    在默认的选项前提之下,选项设置如下:
        BusyBox Settings --->
        Build Options ---> (采用静态编译)
  • Build BusyBox as a static binary (no shared libs)
    Install optin-->
  • Don't use /usr  //可以不选,选了则没有/usr文件夹
    Busybox Library Tuning --->
    (2) MD5: Trade Bytes for Speed
  • Faster /proc scanning code (+100 bytes)
  • Support for /etc/networks
  • Support for /etc/networks
  • Additional editing keys
  • vi-style line editing commands
  • History saving
  • Tab completion
  • Username completion
  • Fancy shell prompts

    Linux Module Utilities --->
    [ ] Support version 2.2.x to 2.4.x Linux kernels  //不能选
  • Support version 2.6.x Linux kernels
    Linux System Utilities --->
       
  • Support for the old /etc/mtab file   //不确定
    Miscellaneous Utilities --->
       
  • devfs(obsolete) //不确定
       
  • Use devfs names for all device(obsolete) //不确定
    Shell --->  
    Choose your default shell(ash)-->
    ---ash   //下面的选项全部选择

    6   编译busybox
    make install
    在busybox/_install 目录下会生成我们需要的文件。
    修改_install/bin/busybox 的属性。为4755
    chmod 4755 ./_install/bin/busybox
    必须要修改属性,否则在busybox 中很多命令会受限
    将编译好的busybox拷贝到/bin下面。拷贝时带上参数-arf或者-dpR。
    除了busybox外,所有其他的命令都是他的link
    /sbin下面也是busybox的link,
    /usr/bin下面也是busybox的link,
    /usr/sbin下面放着所有编译完的可执行文件,具体就不多说了
    7   非常重要之/lib,务必重视
    /lib的库其实就是进行busybox编译的库,即交叉编译器的库,我们这里使用的是3.4.1(
    位置 /usr/local/arm/3.4.1)。
    # cd  /usr/local/arm/3.4.1/arm-linux/lib
    # for file in libc libcrypt libdl libm libpthread libresolv libutil
    > do
    > cp $file-*.so  rootfs/lib (复制到你做的文件系统的/lib目录下)
    > cp -d $file.so.[*0-9]  rootfs/lib
    > done
    # cp -d ld*.so*  rootfs/lib

    8   系统配置文件的建立
    系统配置文件放在/etc目录下
        (1)profile文件
    #Set search library path
    export LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
    #Set user path
            PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH
    alias ll='ls -l'
            #Set PS1
            USER=”`id –un`”
            LOGNAME=$USER
            PS1=’[\u@\h \W]\$ ’
    PATH=$PATH
            export USER LOGNAME PS1 PATH
        (2)fstab文件
    proc  /proc proc  defaults  0 0
    none  /tmp  ramfs defaults  0 0
    mdev  /dev  ramfs defaults  0 0
    sysfs /sys  sysfs defaults  0 0
        (3)inittab文件
    ::sysinit:/etc/init.d/rcS
    ::respawn:-/bin/sh
    ::ctrlaltdel:/bin/umount -a -r
    ::shutdown:/bin/umount -a -r
    ::shutdown:/sbin/swapoff -a
        (4)创建/etc/init.d文件夹和rcS,在rcS中添加
    #! /bin/sh
    # 设置主机名,需要在etc 建立文件host
    ./etc/host
    hostname ${HOSTNAME}
    # mount all filesystem defined in “fstab”
    echo "# mount all..........."
    /bin/mount -a
    echo "# Starting mdev........."
    /bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
    mdev –s
        (5)host文件
    HOSTNAME=Hasotech
        (6)创建mdev.conf文件 (空文件)
    (7)复制主机/etc/下面的文件passwd, group, shadow 文件到/etc
    # cp /etc/group .
    # cp /etc/passwd .
    # cp /etc/shadow .
    修改passwd中用户使用的shell名称。FC6上默认的为bash,而vivi只支持ash。
    root:x:0:0:root:/root:/bin/bash -->
    root:x:0:0:root:/root:/bin/ash
        (8)修改各文件和文件夹的权限
    # chmod 755 /rootfs/etc/init.d/rcS
    # chmod 755 /rootfs/etc/host

    9   yaffs文件系统映像的制作
    使用mkyaffsimg程序可以把一个目录做成一个yaffs映像文件,然后使用usb下载到
    板子上。进入文件系统目录层,使用以下命令。
    #mkyaffsimg rootfs rootfs.img
    这样就会在该目录下生成rootfs.img映像文件,下载到开发板运行即可。

    10  cramfs文件系统映像的制作(cramfs压缩率比较高)
    在FTP中下载cramfs-1.1.tar.gz,解压到自己设定的目录下,如:
    tar xzvf cramfs-1.1.tar.gz –C /home/
    进入生成有mkcramfs文件的目录下(一定要进入此目录,否则会提示找不到该命令)
    输入命令:#./mkcramfs / rootfs rootfs.cramfs
    在当前目录下即生成rootfs.cramfs映像文件。到此Linux操作系统移植完毕。

    九、Qt移植(Qtopia4.2.2)
    1   Qt 和 Qtopia 简介 (自己的理解,不对之处还请见谅)
        Qt特点是“一次编写,处处编译”。
    Qt是在PC机上安装安装使用的;Qtopia Core 是基于嵌入式Linux
    的面向单一应用的嵌入式产品开发平台,即要移植到开发板上使用的;Qt/E
    是面向嵌入式系统的Qt版本,而Qtopia最初是构建于Qt/E
    之上的类似桌面系统的应用程序。
    最初Qtopia和Qt/E是两种不同的程序,但从版本4.1以后,将Qt/E并入了Qtopia,改称为
    Qtopia Core。
    接下来要进行的Qt移植就是指对Qtopia Core的移植,我们的版本是Qtopia4.2.2
    ,即对其库的移植。移植的步骤是这样的,首先在PC机上安装Qtopia4.2.2,
    然后把其中的库放入我们制作的根文件系统的/lib
    之中,最后设置环境变量。以下为详细内容:


    2   下载Qtopia Core 4的源代码,建议到
    www.qtopia.org.cn
    下载, qtopia-core-
    opensource-src-4.2.2.tar.gz,解压
    # tar zxvf qtopia-core-opensource-src-4.2.2.tar.gz
    # cd qtopia-core-opensource-src-4.2.2
    # ./configure -embedded arm -xplatform qws/linux-arm-g++ -depths  4,8,12,16 -
    no-qt3support
    # gmake  (这个过程最漫长...)
    # gmake install  (需root 权限)
    设置Qt的环境变量,修改$HOME/.bash_profile 加入
    # vi $HOME/.bash_profile
        添加
    PATH=/usr/local/Trolltech/QtopiaCore-4.2.2-arm/bin:/usr/local/Trolltech/Qt-4.2
    .2/bin:$PATH
        后面的是Qt for X11的环境变量设置,执行使立即生效
    # source $HOME/.bash_profile
    # echo $PATH
    # which qmake //可查看已经添加成功

    3   把qtopia-core-opensource-src-4.2.2的库放入制作的根文件系统的/lib之中
        安装好的Qtopia在目录/usr/local/Trolltech/QtopiaCore-4.2.2-arm
    下,进入其目录。可以看到/lib文件,其中包括一个fonts
    文件夹,里面是一些字体,内容很多也很占空间(72M左右),因为我们的目标板一般flash
    很小,64M左右,所以我们只选用很常用或者自己觉得好看的字体放入。
    首先在/建立一个文件夹——Qtopia,里面存放入库和字体文件的fonts文件夹,
    # cd /usr/local/Trolltech/QtopiaCore-4.2.2-arm
    # mkdir Qtopia
    然后把/lib下的文件复制到其中
    # cp –arf  /usr/local/Trolltech/QtopiaCore-4.2.2-arm/lib/*   /usr/local/
    Trolltech/QtopiaCore-4.2.2-arm/Qtopia
        删掉多余的字体文件
    # cd /usr/local/Trolltech/QtopiaCore-4.2.2-arm/Qtopia/fonts
        只留下cour.pfa 和 cursor.pfa
        最后把Qtopia拷贝到刚刚我们做好的文件系统的/lib下面
    # cp –arf /usr/local/Trolltech/QtopiaCore-4.2.2-arm/Qtopia  /rootfs/lib

    4         设置环境变量
    在文件系统中,关键要设置环境变量,才能让Qt4的程序找到我们移植的Qt4
    的库,真正跑起来。设置环境变量可分两种,与PC
    机上一样,可以在命令行下设置,还有一种方法是在/etc/profile
    文件中设置,让开发板一启动就自动设置,添加命令如下:
    PATH=/usr/bin:/usr/sbin:$PATH:./
    export FRAMEBUFFER='/dev/fb/0'
    export TSDATAFILE='/mnt/yaffs/minigui/tsdata.dat'
    export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/lib/Qtopia:$LD_LIBRARY_PATH
    export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"
    关键是LD_LIBRARY_PATH,这个设置让系统知道Qt的库的位置,即/usr/lib/Qtopia
    ,还有一个关键是QWS_DISPLAY,因为我们在运行程序时,有一个参数是qws,例如:./
    analogclock –qws ,设置好QWS_DISPLAY
    后才能在显示屏上显示按我们要求比例大小的图像。

    5         测试代码
    进入/usr/local/Trolltech/QtopiaCore-4.2.2-arm/examples/tutorial/t1
    # cd /usr/local/Trolltech/QtopiaCore-4.2.2-arm/examples/tutorial/t1
    # qmake -project
    # qmake
    # make
        生成二进制文件t1,通过适合的方式拷贝到文件系统中,执行 ./t1 –qws
    可以显示 helloworld

    十、Qt4编程(fc6—使用KDevelop联合开发)
    1   Qt/X11的安装
        下载Qtopia Core 4的源代码,建议到
    www.qtopia.org.cn
    下载, qt-x11-opensource
    -src-4.2.2.tar.gz,解压
    # tar xvzf qt-x11-opensource-src-4.2.2.tar.gz
    # cd qt-x11-opensource-src-4.2.2
    # ./configure
    # make
    # su –c “make install”  
    设置Qt的环境变量,修改$HOME/.bash_profile 加入
    # vi $HOME/.bash_profile
        添加
    PATH=/usr/local/Trolltech/Qt-4.2.2/bin:/usr/local/Trolltech/QtopiaCore-4.2.2-
    arm/bin: $PATH
        执行使立即生效
    # source $HOME/.bash_profile
    # echo $PATH
    # which qmake  //可查看已经添加成功
       
    2           fc6下使用KDevelop开发Qt4
    在安装fc6时使用全部安装,特别是开发软件的安装,就默认带KDevelop3.3.4
    (1)  启动KDevelop KDE/C++
    (2)  选择工程 | 新建工程 |
    显示全部工程模版 | QMakeProject | Qt4 Application | 输入工程名 | 默认下一步
    (3)  工程 | 工程选项 | C++特点设置 |
    Qt | 选定 Enable Qt options | 选择Qt4 | 选择Qt4的路径(即QMake Binary 和
    Designer Binary)
    (4)  分别执行“构建”“编译”“执行”3步
    使用KDevelop开发Qt4
    ,完全要靠输入代码完成,工作量大,一些工作易重复或加大工作量,所以推荐下面这种?
    椒ǎ篕Develop与Qt4的Qt Designer联合开发
    3   KDevelop与Qt4的Qt Designer联合开发(推荐)
        (1)用Qt Designer设计出.ui文件,比如工程文件位置为/root/hello/hello.ui
        (2)进入工程目录进行编译
        # cd /root/hello
        //生成ui_hello.h头文件,以备后面开发之用,我们写的程序依靠此文件
        # uic –o ui_hello.h hello.ui
        # qmake –project
        # qmake
        (3)启动KDevelop KDE/C++, 选择 Project | Import Existing Project
    选择我们刚才在生成的/root/hello/hello.pro文件,把文件导入KDevelop
        (4)书写main.cpp文件及需要的其他文件完成编辑工作。main.cpp
    和其他文件的书写很有讲究,这里不再详述,请参考Qt4的帮助文档。

    PS:vivi设置
    1   SBC2410x的VIVI已经被友善之臂自动加入了USB
    功能,这个小功能省去了我们很多麻烦。所以建议大家先把板子的USB驱动装上。
    重新分区
    分区名称
    分区大小

    vivi
    128k

    param
    64k

    kernel
    3M

    root
    40M

    user
    15M

    在vivi命令行下输入如下命令
    part show
    然后输入:
    part del  
    参数name为各个显示分区的名字,一直到把所有分区都删除为止,然后依次输入:
    part add vivi 0x0 0x20000 0
    part add param 0x20000 0x10000 0
    part add kernel 0x00100000 0x00300000 0
    part add root 0x00400000 0x02800000 0
    part add user 0x02d00000 0x00f00000 0
    part save
    现在分区就已经完毕了。
    vivi的分区一定要与内核里的分区设置一致,即与arch/arm/machs3c2410/devs.c里
    static struct mtd_partition partition_info[]分区一致,至少是kernel
    后的地址一致,这个需特别注意。

    2   设置启动参数
    执行:
    param show
    就可以见到你现在的所有VIVI参数,其中linux command line为传递给linux
    内核的启动参数。因2.4与2.6在参数方面有变动,所以输入如下命令:
    param set linux_cmd_line “noinitrd root=/dev/mtdblock3 init=/linuxrc console=
    ttySAC0,115200”
    param save


    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/71164/showart_1683360.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP