原创 内核(2.6.14) + 根文件系统 + Qt4 移植 for S3C2410

2010-3-1 10:52 2318 4 5 分类: MCU/ 嵌入式

TARGET<?XML:NAMESPACE PREFIX = O />


CPU:   S<?XML:NAMESPACE PREFIX = ST1 />3C2410X


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文件


    找到ARCHCROSS_COMPILE修改


    ARCH ?= arm


    CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux- 


(此处为你交叉编译的路径)


 


2  设置flash分区


    arch/arm/machs3c2410/devs.c文件中添加头文件


    #include <linux/mtd/partitions.h>


    #include <linux/mtd/nand.h>


    #include <asm/arch/nand.h> 


    然后建立分区表


    /* 一个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.ccs8900.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 <asm/arch/regs-mem.h>


     


    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 <asm/arch/smdk2410.h> 


    其实这个就是下面的那个头文件的链接/include/asm-arm/arch-s3c2410/smdk2410.h


     


    6   include/asm-arm/arch-s3c2410/目录下创建smdk2410.h文件其内容为


        #ifndef _INCLUDE_SMDK2410_H_


        #define _INCLUDE_SMDK2410_H_


        #include <linux/config.h>


        #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 <asm/arch/regs-lcd.h>


    #include <asm/arch-s3c2410/fb.h>


    //-------------------------------------------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 <asm/arch/usb-control.h>


    #include <asm/arch/regs-clock.h>


    #include <linux/device.h>


    #include <linux/delay.h>


     


    //-------------------------------------------------usb


    struct s3c2410_hcd_info usb_s3c2410_info = {


                  .port[0] = {


                         .flags = S3C_HCDFLG_USED


                  }


    };


    int smdk2410_usb_init(void) /* USB */


    {


                  unsigned long upllvalue = (0x78<<12)|(0x02<<4)|(0x03);


                  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


    然后选择<Exit>返回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---> 选中其中两个选项


    然后选择<Exit>返回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发行版本具有功能种类比较多的应用程序,这些应用程序占用的空间也很大,这对存储容量空间有限的开发板来说就不是理想的选择,在嵌入式开发过程中,经常用BusyBox来定制应用程序。BusyBox具有shell的功能,它能提供系统所需要的大部分工具,包括编辑工具、网络工具、模块加载工具、压缩解压缩工具、查找工具、帐号密码管理工具和进程相关工具等。


    目前BusyBox的最新版本是BusyBox-1.9.2版本,下载解压,切换到BusyBox


    根目录下,修改Makefile,找到ARCHCROSS 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下面也是busyboxlink,


    /usr/bin下面也是busyboxlink,


    /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之上的类似桌面系统的应用程序。


    最初QtopiaQt/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


     


    <!--[if !supportLists]-->4         <!--[endif]-->设置环境变量


    在文件系统中,关键要设置环境变量,才能让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后才能在显示屏上显示按我们要求比例大小的图像。


     


    <!--[if !supportLists]-->5         <!--[endif]-->测试代码


    进入/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  //可查看已经添加成功


       


    <!--[if !supportLists]-->2           <!--[endif]-->fc6下使用KDevelop开发Qt4


    在安装fc6时使用全部安装,特别是开发软件的安装,就默认带KDevelop3.3.4


    <!--[if !supportLists]-->(1)  <!--[endif]-->启动KDevelop KDE/C++


    <!--[if !supportLists]-->(2)  <!--[endif]-->选择工程 | 新建工程 | 显示全部工程模版 | QMakeProject | Qt4 Application | 输入工程名 | 默认下一步


    <!--[if !supportLists]-->(3)  <!--[endif]-->工程 | 工程选项 | C++特点设置 | Qt | 选定 Enable Qt options | 选择Qt4 | 选择Qt4的路径(QMake Binary Designer Binary)


    <!--[if !supportLists]-->(4)  <!--[endif]-->分别执行“构建”“编译”“执行”3


    使用KDevelop开发Qt4,完全要靠输入代码完成,工作量大,一些工作易重复或加大工作量,所以推荐下面这种方法:KDevelopQt4Qt Designer联合开发


    3   KDevelopQt4Qt 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的帮助文档


     


    PSvivi设置


    1   SBC2410xVIVI已经被友善之臂自动加入了USB功能,这个小功能省去了我们很多麻烦。所以建议大家先把板子的USB驱动装上。


    重新分区



    分区名称


    分区大小


    vivi


    128k


    param


    64k


    kernel


    3M


    root


    40M


    user


    15M


    vivi命令行下输入如下命令


    part show


    然后输入:


    part del <name>


    参数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.cstatic struct mtd_partition partition_info[]分区一致,至少是kernel后的地址一致,这个需特别注意。


     


    2   设置启动参数


    执行:


    param show


    就可以见到你现在的所有VIVI参数,其中linux command line为传递给linux内核的启动参数。因2.42.6在参数方面有变动,所以输入如下命令:


    param set linux_cmd_line noinitrd root="/dev/mtdblock3" init="/linuxrc" console="ttySAC0",115200


    param save


     


    本文出自:http://blog.chinaunix.net/u2/69642/showart_695893.html

  • 文章评论1条评论)

    登录后参与讨论

    用户1409644 2010-3-2 19:48

    我是不懂这个,但我乐意读。谢谢楼主!
    相关推荐阅读
    用户461645 2010-05-04 18:22
    TI的davinci和omap资源--转帖,也是为了方便自己
    TI网站资源,建议大家注册一个my.ti.com,方便下载一些软件开发工具和资料 TI中文主页: http://focus.ti.com.cn/cn/tihome/docs/homepage.tsp ...
    用户461645 2010-03-06 16:49
    把控制台(console)交给LCD
    这两天一直想让我的开发板挣脱PC机的控制,把控制台移到LCD上去,然后用USB键盘作为输入,在LCD上构成一个终端。此刻有了一点点进展,于是把她记录下来,虽然我的开发板现在还不能用USB键盘作为输入设...
    用户461645 2010-02-26 16:56
    windows xp平台安装Qt4.5开发环境
    测试环境debian squeeze系统上virtualbox3.0.8中的windows xp sp3Qt的官方站点现在是http://qt.nokia.com/下载sdk在官方站点选择LGPL/F...
    用户461645 2010-02-24 11:58
    承接linux开机logo制作
    针对freescale 的I.mx27项目,要去掉屏幕的光标,可以直接在make menuconfig中去掉drivers---->Graphis support----->console...
    用户461645 2010-02-23 17:09
    不用启动盘的安装方法
    不用制作软盘。空出一个大于3g的空间,格式为fat32,最好是最后一个分区。确保md5正确后,把iso文件放到c盘下,不要放到任何文件夹中,直接放到根目录下。把dosutils解到根目录下,再把vml...
    我要评论
    1
    4
    关闭 站长推荐上一条 /2 下一条