⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uclinux下显示驱动移植及minigui的移植 .txt

📁 关于如何在s344b0的uClinux下显示驱动移植及minigui的移植
💻 TXT
📖 第 1 页 / 共 2 页
字号:
uClinux下显示驱动移植及minigui的移植 


这几天包括今天都非常的不顺,写这些字的时候, 我的本本正在进行Linux ext3分区的建立,我的Fedola3彻底崩溃了,我的很多uClinux移植成果不见了, 包括最看重的LCD显示的移植内容,这些都需要重新建立了,很多过程已很模糊, 这也映证了我在LINUX上面的许多迷惑,学透它真的很难,内核的移植面临很多的难点,在我即将实施的项目上(手持终端),需要对LCD显示,触摸屏,网络等等进行移植,我的硬件是ARM7(s3c44b0x)
采用uClinux为操作系统,GUI采用飞漫的MINIGUI。一切都刚开始。
    如果安装一切顺利的话, 我将把我移植的全过程完整记录下来,为自己留下一些心得以便于长期之后仍然记得当时的情形, 脑子记东西是不行了,可能是年纪大了的原因。
2005.11.23
在昨天下午的安装Fedora3的过程很不顺利,屡次失败,今天上班后又失败几次,后来分析是与ISO所在的D区(FAT32)磁盘有问题, 用软件检查, 发现D区有问题,C区正常,于是将ISO拷贝到C区(FAT32),从REDHAT9的ISO第一张上提取了DOSUTILS目录,将其拷贝进C区根目录,用Fedora3中的第一个ISO中的ISOLINUX目录下的这两个文件拷贝到DOSUTILS\AUTOBOOT下,用DOS重新启动机器,在提示符下键入:
C:\>CD DOSUTILS
C:\>AUTOBOOT
开始安装Fedora3,中间过程正常,经过很长时间安装完成后,重新启动,默认启动采用X WINDOW启动,由于占用大量内存,我又习惯在文本状态下运行, 于是启动完成后, 修改/etc/inittab,把id:4:initdefault 改为 id:3: initdefaul保存后重启。Linux工作在文本模式下。
在另台PC上用CUTEFTP软件与LINUX主机建立FTP连接方式,将准备好的arm-elf-tools-20030314.sh和uClinux-dist-20040408.tar.gz及uClinux20050122.tar.bz2上载到LINUX主机的/home目录,修改arm-elf-tools-20030314.sh的属性为可执行,在提示符下键入tar zxvf uClinux-dist-20040408.tar.gz将原版uClinux解压到/home目录下再在home目录下键入tar jxvf uClinux20050122.tar.bz2将uClinux解压到/home目录下,覆盖原uClinux-dist目录,然后键入sh arm-elf-tools-20030314.sh将uClinux工具链解压到系统中。做到这一步,就已经在LINUX下建立了uClinux开发环境。我们采用SecureCRT4.1软件在Windows主机登陆LINUX主机,当然我是以SUPERVISOR身份登陆的。经过这几步我基本建立了uClinux的比较实用的交叉编译环境。下面就是针对我的应用平台来做移植了, 当然这个过程将极其艰苦。
    补充一点, 通过CUTEFTP上载arm-elf-tools-20030314.sh会造成文件格式损坏, 将其后缀改变后上载,一切正常。
    这一版的uClinux是来自勤研科技的配套S3C44B0X豪华板的改造过的内核。是基于uClinux2.4.x的改造。已经移植了串口,网络,YAFFS文件系统。但并没有基于Framebuffer的移植。更没有IIS、TOUCH SCREEN、USB、外部接口的移植。
2005.11.25     
为了移植Framebuffer驱动将宇立泰的补钉文件uClinux-20040408.patch上载到Linux主机上的/home/uClinux-dist目录下,键入patch –p1<uClinux-20040408.patch对uClinux打补钉。
这个补钉基于宇立泰开发板的Framebuffer驱动移植。我们可以修改它的相关文件来适应我的开发板。
2005-11-28
我们现在开始Framebuffer的移植,进入uClinux-dist目录,打开kernel_44b0.cfg文件,在SYSTEM TYPE大项中增加CONFIG_SPU_NAME="S3C44B0X"  CONFIG_CPU_S3C44B0X=y。在config.in文件中增加
fi
if [ "$CONFIG_DEFAULTS_SAMSUNG" = "y" ]; then
choice 'Samsung Products' "44B0X CONFIG_DEFAULTS_SAMSUNG_44B0X \
4510B CONFIG_DEFAULTS_SAMSUNG_4510B \
" 44B0X
在/home/uClinux-dist/vendors/Samsung/44B0X/config.linux-2.4.x中增加
CONFIG_ARCH_S3C44B0=y
在/home/uClinux-dist/linux-2.4.x/drivers/video/Config.in中增加
if [ "$CONFIG_ARCH_S3C44B0" = "y" ]; then
   tristate '  Samsung S3C44B0X built-in LCD controller frame buffer support' CONFIG_FB_S3C44B0X
   fi
在/home/uClinux-dist/linux-2.4.x/drivers/video/目录下的Makefile文件中增加
obj-$(CONFIG_FB_S3C44B0X)      += s3c44b0xfb.o
在/home/uClinux-dist/linux-2.4.x/drivers/video/fbmem.c中增加
extern int s3c44b0xfb_init(void);
extern int s3c44b0xfb_setup(char*);

#ifdef CONFIG_FB_S3C44B0X
    { "s3c44b0xfb", s3c44b0xfb_init, s3c44b0xfb_setup },
#endif

修改/home/uClinux-dist/linux-2.4.x/include/asm/arch中的hardware.h文件以适应自己的板子。
这些做完后,我们修改/home/uClinux-dist/linux-2.4.x/drivers/video/s3c44b0x.c,这个程序是实现FrameBuffer驱动的关键, 修改与LCD硬件有关的代码。
完成后利用make menuconfig命令, 完成需要裁减的内核配置,运行build_first.sh和build_final.sh在images目录下生成image.rom image.ram.将image.rom拷贝到WINDOWS主机,启动开发板,输入appprog ,打开windows命令行状态, 输入tftp –I 192.168.111.8 put image.rom, 将内核烧入开发板内, 运行RUN。
2005.11.29 
今天的最大的收获就是显示移植驱动做好了, 经过总结,显示的驱动和以下几个文件关系最大/home/uClinux-dist/linux-2.4.x/include/asm/arch/hardware.h 
    /home/uClinux-dist/linux-2.4.x/include/asm/keyboard..h 
    /home/uClinux-dist/linux-2.4.x/drivers/video/s3c44b0x.h 
    /home/uClinux-dist/linux-2.4.x/drivers/video/fbmem.h 
    /home/uClinux-dist/linux-2.4.x/drivers/video/makefile
    /home/uClinux-dist/vendors/Samsung/44b0x/makefile 
交叉编译应用程序应加-elf2flt参数。例如:arm-elf-gcc –o a a.c –elf2flt
为了测试Framebuffer驱动是否正常, 将编译过的内核烧入开发板,运行起来, 在串口控制台上输入/bin/cp t240.bin /dev/fb0. 在LCD显示出256色的240X320图片。又编制了一个在240X320LCD上显示图片的程序(linuxdisp),程序代码如下
#include<linux/fb.h> 
#include<unistd.h> 
#include<sys/mman.h> 
#include<sys/types.h> 
#include<sys/stat.h> 
#include<fcntl.h> 
unsigned char abc[76800] = {…..略}
int main() { 
    int framebuffer_device; 
    int line_size,buffer_size, i; 
    char *screen_memory; 
    //unsigned char buffer[480000],j=0;
    struct fb_var_screeninfo var_info; 
    struct fb_fix_screeninfo fix_info; 
    framebuffer_device = open ( "/dev/fb0" , O_RDWR); 
    ioctl (framebuffer_device, FBIOGET_VSCREENINFO, &var_info); 
    ioctl (framebuffer_device, FBIOGET_FSCREENINFO, &fix_info);
    line_size = var_info.xres * var_info.bits_per_pixel / 8; 
    buffer_size = line_size * var_info.yres; 
    var_info.xoffset = 0; 
    var_info.yoffset = 0; 
    //ioctl (framebuffer_device, FBIOPAN_DISPLAY,&var_info) == -1); 
    //write(framebuffer_device,buffer,sizeof(buffer_size));
    screen_memory = (char *) mmap (0, buffer_size, PROT_READ | PROT_WRITE, 0, framebuffer_device, 0); 
    for (i=0;i < buffer_size ; i++ ) 
    {            
        *(screen_memory+i) =abc[i]; 
    } 
    sleep(2);
    return 0; 
}
将这个软件放在/home/uClinux-dist/user/myapp下, 制作makefile。如下
CC=arm-elf-gcc
EXEC = linuxdisp
OBJS = linuxdisp.c 
#LDFLAGS=-L/home/uClinux-dist/uClibc/lib
all: $(EXEC)

$(EXEC): $(OBJS)
    $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS)-elf2flt

romfs:
    $(ROMFSINST) /bin/$(EXEC)

clean:
    -rm -f $(EXEC) *.elf *.gdb *.o
执行make,编译成功。将执行文件linuxdisp拷贝进/home/romfs/bin下, 重新编译内核烧入开发板,执行/bin/linuxdisp.程序正常运行。 在LCD上正常显示图片。经过这几步测试可以说Framebuffer驱动的移植成功了。下一步将进行MINIGUI的移植。
2005.12.2
    MINIGUI的移植现在正式开始了。它的显示结果将影响我对它的信心。
1.    安装资源文件:tar zxvf minigui-res-1.3.0.tar该命令将建立minigui-res-1.3.0目录。
Cd minigui-res-1.3.0
Make install
2.    配置和编译minigui:tar zxvf libminigui-1.3.3.tar.gz,该命令将建立libminigui-1.3.3目录。
Cd libminigui-1.3.3
./configure
make 
make install
修改/etc/ ld.so.conf在最后添加/usr/local/lib
ldconfig
3.    编译并运行MINIGUI演示程序:
tar zxvf mde-1.3.0.tar.gz
tar zxvf mg-samples-1.3.0.tar.gz
cd mde-1.3.0
./configure
make
修改/usr/local/etc/ MiniGUI.cfg 将mdev=/dev/mouse改为mdev=/dev/mouse0保存退出。(FC3的缘故)。在PC上成功演示

2005-12-9
   为了调试应用程序方便, 先做一下NFS的先期准备。
   先修改/etc/exports,假如要增加/uclinux目录为与其他主机共享的目录。
   增加一条: /uclinux 192.168.111.x(rw,sync),   关闭放火墙。
    /etc/rc.d/init.d/portmap start
    /etc/rc.d/init.d/./nfs start  
    exportfs –a    
检查是否已经启动NFS服务。 Mount 192.168.111.11:/uclinux /mnt
配置uclinux时, 
配置内核     进入[file system]选项
  [*] nfs file system support
  [*] provide nfsv3 client support
  配置用户选项  进入network applications
  [*] portmap 
  进入busybox选项
  [*] mount 
  [*] mount: support nfs mounts
内核编译。启动uclinux
    portmap &
   mount –t nfs –o rsize=1024,wsize=1024,timeo=3,udp 192.168.111.11:/uclinux /mnt/yaffs/sample
进入/mnt/yaffs/sample, 就能看见主机上uclinux下的文件,执行其中的执行文件,一切OK。
     
2005-12-13
这几天最大的收获是MINIGUI移植到开发板上的成功,令我非常振奋。移植针对的版本是minigui1.3.3。这个版本是目前飞漫开源最彻底的版本了。我的开发板上的显示器采用的是256色LCD,我针对我的开发板的条件,编写了相应的运行脚本:domain.sh

#!/bin/sh
rm config.cache config.status -f
CC=arm-elf-gcc \
CFLAGS="-I/home/uClinux-dist/uClibc/include -Dlinux -D__linux__ -D__uClinux__ -Dunix " \
LDFLAGS="-Wl,-elf2flt -static -Wl,-move-rodata -Wl,-L/home/uClinux-dist/lib/uClibc/lib -Wl,-L/home/uClinux-dist/linux-2.4.x/lib -Wl,-lc -Wl,-lm" \
  ./configure --prefix=/usr/local/ \
  --prefix=/usr/local/arm-elf \
  --build=i386-pc-linux-gnu \
  --host=arm-elf-linux \
  --target=arm-elf-linux \
  --disable-shared \
  --disable-lite \
  --disable-standalone \
  --enable-incoreres \
  --disable-flatstyle \
  --enable-newgal \
  --disable-nativegal \
  --disable-galcommlcd \
  --enable-galfbcon \
  --enable-adsial \
  --disable-micemoveable \
  --disable-cursor \
  --disable-fblin1r \
  --enable-fblin8 \

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -