linux 4G驱动移植,uClinux下显示驱动移植及minigui的移植

includeunsigned char abc[76800] = {…..略}

nt 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

BJS = 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

ake

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 \

--disable-fblin16 \

--disable-fblin32 \

--disable-textmode \

--enable-dummyial \

--disable-mc68x328ial \

--disable-nativeial \

--disable-qvfbial \

--disable-qpfsupport \

--disable-ttfsupport \

--disable-type1support \

--disable-latin9support \

--disable-gbksupport \

--disable-big5support \

--disable-unicodesupport \

--disable-savebitmap \

--disable-imegb2312 \

--disable-imegb2312py \

--disable-aboutdlg \

--disable-savescreen \

--disable-grayscreen \

--enable-tinyscreen \

--enable-video-fbcon \

--disable-video-qvfb \

--disable-nativegalqvfb \

--with-osname=uclinux

运行该脚本, 然后make, make install, ldconfig。先编译例子中最简单的helloworld.c下到板中运行,提示错误

/bin> helloworld

No available video device.

NEWGAL: Does not find matched engine: qvfb.

GDI: Can not get graphics engine information!

InitGUI failure when using incore resource.

pid 30: failed 256

经过跟踪,进入sysres/mgedt.c

#include "common.h"

typedef struct _ETCSECTION

{

int key_nr; /* key number in the section */

char *name; /* name of the section */

char **keys; /* key string arrays */

char **values; /* value string arrays */

} ETCSECTION;

typedef ETCSECTION* PETCSECTION;

typedef struct _ETC_S

{

int section_nr; /* number of sections */

PETCSECTION sections; /* pointer to section arrays */

} ETC_S;

#ifdef _INCORE_RES

static char *SYSTEM_KEYS[] = {"gal_engine", "ial_engine", "mdev", "mtype"};

#ifdef __ECOS

static char *SYSTEM_VALUES[] = {"ecoslcd", "ipaq", "/dev/ts", "none"};

#else

/static char *SYSTEM_VALUES[] = {"qvfb", "qvfb", "/dev/ts", "none"}; //这是我注释掉的原来的, 你们看看程序结构,不管我怎么配置NEWGAL,

//这里都将不可避免的进入QVFB

static char *SYSTEM_VALUES[] = {"fbcon", "dummy", "none", "none"}; //我新加的。

#endif

static char *FBCON_KEYS[] = {"defaultmode"};

static char *FBCON_VALUES[] = {"240x320-8bpp"}; //原来的是240X320-16bpp

static char *QVFB_KEYS[] = {"defaultmode", "display"};

static char *QVFB_VALUES[] = {"640x480-16bpp", "0"};

tatic char *SYSTEMFONT_KEYS[] =

{"font_number", "font0", "font1", "font2", "default", "wchar_def", "fixed", "caption", "menu", "control"};

tatic char *SYSTEMFONT_VALUES[] =

{

"3","rbf-fixed-rrncnn-6-12-ISO8859-1", "*-fixed-rrncnn-*-12-GB2312", "*-SansSerif-rrncnn-*-12-GB2312",

"0", "1", "1", "1", "1", "1"

};

static char *CURSORINFO_KEYS[] = {"cursornumber"};

static char *CURSORINFO_VALUES[] = {"2"};

static char *ICONINFO_KEYS[] = {"iconnumber"};

static char *ICONINFO_VALUES[] = {"5"};

static char *BITMAPINFO_KEYS[] = {"bitmapnumber"};

static char *BITMAPINFO_VALUES[] = {"3"};

/*

static char *BGPICTURE_KEYS[] = {"position"};

static char *BGPICTURE_VALUES[] = {"center"};

static char *MOUSE_KEYS[] = {"dblclicktime"};

static char *MOUSE_VALUES[] = {"300"};

static char *EVENT_KEYS[] = {"timeoutusec", "repeatusec"};

static char *EVENT_VALUES[] = {"300000", "50000"};

*/

static ETCSECTION mgetc_sections [] =

{

{4, "system", SYSTEM_KEYS, SYSTEM_VALUES},

{1, "fbcon", FBCON_KEYS, FBCON_VALUES},

{2, "qvfb", QVFB_KEYS, QVFB_VALUES},

{10,"systemfont", SYSTEMFONT_KEYS, SYSTEMFONT_VALUES},

{1, "cursorinfo", CURSORINFO_KEYS, CURSORINFO_VALUES},

{1, "iconinfo", ICONINFO_KEYS, ICONINFO_VALUES},

{1, "bitmapinfo", BITMAPINFO_KEYS, BITMAPINFO_VALUES},

/* optional sections */

/*

{1, "bgpicture", BGPICTURE_KEYS, BGPICTURE_VALUES},

{1, "mouse", MOUSE_KEYS, MOUSE_VALUES},

{2, "event", EVENT_KEYS, EVENT_VALUES},

*/

};

ETC_S MGETC = { 7, mgetc_sections };

#endif /* _INCORE_RES */

修改后编译并运行。仍然提示错误。

/bin> helloworld

AP_SHARED not supported (cannot write mappings to disk) //这条一看就知道在MMAP使用了不适合uClibc库的参数, 此项应该设置为0

NEWGAL: Does not find matched engine: fbcon. GDI: Can not get graphics engine information!

InitGUI failure when using incore resource.

Unable to memory map the video hardwarepid 30: failed 256

后来经过跟踪。在/libminigui-1.3.3/src/newgal/fbcon/fbvideo中找到OPEN及MMAP引用。

将mapped_mem = mmap(NULL, mapped_memlen,

PROT_READ|PROT_WRITE, MAP_SHARED, console_fd, 0);

改为

#ifdef __uClinux__

mapped_mem = mmap(NULL, mapped_memlen,

PROT_READ|PROT_WRITE, 0, console_fd, 0);

#else

mapped_mem = mmap(NULL, mapped_memlen,

PROT_READ|PROT_WRITE, MAP_SHARED, console_fd, 0);

#endif

将mapped_io = mmap(NULL, mapped_iolen, PROT_READ|PROT_WRITE,

MAP_SHARED, console_fd, mapped_memlen);

改为

ifdef __uClinux__

mapped_io = mmap(NULL, mapped_iolen, PROT_READ|PROT_WRITE,

0, console_fd, mapped_memlen);

else

mapped_io = mmap(NULL, mapped_iolen, PROT_READ|PROT_WRITE,

MAP_SHARED, console_fd, mapped_memlen);

#endif

编译后运行。发现出现代码崩溃,

/bin/helloworld

Unhandled fault: external abort on linefetch (F4) at 0x00000001

fault-common.c(97): start_code=0xcd00040, start_stack=0xcdfff84)

pid 32: failed 7

经过艰苦的跟踪分析。在/home/libminigui-1.3.3/src/kernel/desktop.c中。

将if (!InitSystemRes ()) {

fprintf (stderr, "DESKTOP: Can not initialize system resource!\n");

return FALSE;

注释掉。

编译运行。 显示OK, 有跑了几个例子都正常。那个时刻真的很高兴。

2005-12-15

从今天起将做触摸屏的移植, 这是很重要的移植步骤,将使我们的程序真正意义的运行起来。

在/home/uClinux-dist/linux-2.4.x/drivers/char找到mc68328digi.c将起改名为s3c44b0xts.c,将/home/uClinux-dist/linux-2.4.x/include/linux下的mc68328digi.h改为s3c44b0xts.h。

先做好内核配置准备:

在/home/uClinux-dist/linux-2.4.x/drivers/char/config.in中增加

if [ "$CONFIG_ARCH_S3C44B0" = "y" ]; then

bool 'S3C44B0 TOUCH SCREEN SUPPORT' CONFIG_TS_S3C44B0

fi

在/home/uClinux-dist/linux-2.4.x/drivers/char/makefile中增加

obj-$(CONFIG_TS_S3C44B0) += s3c44b0xts.o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值