uClinux下顯示驅(qū)動(dòng)移植及minigui的移植(轉(zhuǎn)載)_第1頁(yè)
uClinux下顯示驅(qū)動(dòng)移植及minigui的移植(轉(zhuǎn)載)_第2頁(yè)
uClinux下顯示驅(qū)動(dòng)移植及minigui的移植(轉(zhuǎn)載)_第3頁(yè)
uClinux下顯示驅(qū)動(dòng)移植及minigui的移植(轉(zhuǎn)載)_第4頁(yè)
uClinux下顯示驅(qū)動(dòng)移植及minigui的移植(轉(zhuǎn)載)_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、首頁(yè) 站內(nèi)導(dǎo)航 幫助 歡迎您登錄 |注冊(cè)登錄站點(diǎn)用戶名密碼 wacoo的日志wacoo的主頁(yè) » TA的所有日志 » 查看日志« 返回上一頁(yè)bcef記住我 注冊(cè) 登錄 uClinux下顯示驅(qū)動(dòng)移植及minigui的移植(轉(zhuǎn)載)已有 2008 次閱讀 2006-08-31 20:21天氣: 晴朗心情: 高興2005.11.22這幾天包括今天都非常的不順,寫這些字的時(shí)候, 我的本本正在進(jìn)行Linux ext3分區(qū)的建立,我的Fedola3徹底崩潰了,我的很多uClinux移植成果不見(jiàn)了,包括最看重的LCD顯示的移植內(nèi)容,這些都需要重新建立了,很多過(guò)程已很模糊,這也映證

2、了我在LINUX上面的許多迷惑,學(xué)透它真的很難,內(nèi)核的移植面臨很多的難點(diǎn),在我即將實(shí)施的項(xiàng)目上(手持終端),需要對(duì)LCD顯示,觸摸屏,網(wǎng)絡(luò)等等進(jìn)行移植,我的硬件是ARM7(s3c44b0x)采用uClinux為操作系統(tǒng),GUI采用飛漫的MINIGUI。一切都剛開(kāi)始。如果安裝一切順利的話, 我將把我移植的全過(guò)程完整記錄下來(lái),為自己留下一些心得以便于長(zhǎng)期之后仍然記得當(dāng)時(shí)的情形, 腦子記東西是不行了,可能是年紀(jì)大了的原因。2005.11.23在昨天下午的安裝Fedora3的過(guò)程很不順利,屢次失敗,今天上班后又失敗幾次,后來(lái)分析是與ISO所在的D區(qū)(FAT32)磁盤有問(wèn)題,用軟件檢查,發(fā)現(xiàn)D區(qū)有問(wèn)題,

3、C區(qū)正常,于是將ISO拷貝到C區(qū)(FAT32),從REDHAT9的ISO第一張上提取了DOSUTILS目錄,將其拷貝進(jìn)C區(qū)根目錄,用Fedora3中的第一個(gè)ISO中的ISOLINUX目錄下的這兩個(gè)文件拷貝到DOSUTILSAUTOBOOT下,用DOS重新啟動(dòng)機(jī)器,在提示符下鍵入:C:>CD DOSUTILSC:>AUTOBOOT開(kāi)始安裝Fedora3,中間過(guò)程正常,經(jīng)過(guò)很長(zhǎng)時(shí)間安裝完成后,重新啟動(dòng),默認(rèn)啟動(dòng)采用X WINDOW啟動(dòng),由于占用大量?jī)?nèi)存,我又習(xí)慣在文本狀態(tài)下運(yùn)行, 于是啟動(dòng)完成后,修改/etc/inittab,把id:4:initdefault 改為 id:3: ini

4、tdefaul保存后重啟。Linux工作在文本模式下。在另臺(tái)PC上用CUTEFTP軟件與LINUX主機(jī)建立FTP連接方式,將準(zhǔn)備好的arm-elf-tools-20030314.sh和uClinux -dist-20040408.tar.gz及uClinux20050122.tar.bz2上載到LINUX主機(jī)的/home目錄,修改arm- elf-tools-20030314.sh的屬性為可執(zhí)行,在提示符下鍵入tar zxvf uClinux-dist-20040408.tar.gz將原版uClinux解壓到/home目錄下再在home目錄下鍵入tar jxvf uClinux20050122

5、.tar.bz2將uClinux解壓到/home目錄下,覆蓋原uClinux-dist目錄,然后鍵入sh arm-elf-tools-20030314.sh將uClinux工具鏈解壓到系統(tǒng)中。做到這一步,就已經(jīng)在LINUX下建立了uClinux開(kāi)發(fā)環(huán)境。我們采用SecureCRT4.1軟件在Windows主機(jī)登陸LINUX主機(jī),當(dāng)然我是以SUPERVISOR身份登陸的。經(jīng)過(guò)這幾步我基本建立了 uClinux的比較實(shí)用的交叉編譯環(huán)境。下面就是針對(duì)我的應(yīng)用平臺(tái)來(lái)做移植了, 當(dāng)然這個(gè)過(guò)程將極其艱苦。補(bǔ)充一點(diǎn), 通過(guò)CUTEFTP上載arm-elf-tools-20030314.sh會(huì)造成文件格式損壞

6、, 將其后綴改變后上載,一切正常。 這一版的uClinux是來(lái)自勤研科技的配套S3C44B0X豪華板的改造過(guò)的內(nèi)核。是基于uClinux2.4.x的改造。已經(jīng)移植了串口,網(wǎng)絡(luò),YAFFS文件系統(tǒng)。但并沒(méi)有基于Framebuffer的移植。更沒(méi)有IIS、TOUCH SCREEN、USB、外部接口的移植。 2005.11.25為了移植Framebuffer驅(qū)動(dòng)將宇立泰的補(bǔ)釘文件uClinux-20040408.patch上載到Linux主機(jī)上的 /home/uClinux-dist目錄下,鍵入patch p1<uClinux-20040408.patch對(duì)uClinux打補(bǔ)釘。這個(gè)補(bǔ)釘基于宇

7、立泰開(kāi)發(fā)板的Framebuffer驅(qū)動(dòng)移植。我們可以修改它的相關(guān)文件來(lái)適應(yīng)我的開(kāi)發(fā)板。2005-11-28我們現(xiàn)在開(kāi)始Framebuffer的移植,進(jìn)入uClinux-dist目錄,打開(kāi)kernel_44b0.cfg文件,在SYSTEM TYPE大項(xiàng)中增加CONFIG_SPU_NAME="S3C44B0X" CONFIG_CPU_S3C44B0X=y。在config.in文件中增加fiif "$CONFIG_DEFAULTS_SAMSUNG" = "y" ; thenchoice 'Samsung Products'

8、"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" ; thentristate &

9、#39; Samsung S3C44B0X built-in LCD controller frame buffer support' CONFIG_FB_S3C44B0Xfi在/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 s3c4

10、4b0xfb_setup(char*);#ifdef CONFIG_FB_S3C44B0X "s3c44b0xfb", s3c44b0xfb_init, s3c44b0xfb_setup ,#endif修改/home/uClinux-dist/linux-2.4.x/include/asm/arch中的hardware.h文件以適應(yīng)自己的板子。這些做完后,我們修改/home/uClinux-dist/linux-2.4.x/drivers/video/s3c44b0x.c,這個(gè)程序是實(shí)現(xiàn)FrameBuffer驅(qū)動(dòng)的關(guān)鍵, 修改與LCD硬件有關(guān)的代碼。完成后利用make me

11、nuconfig命令,完成需要裁減的內(nèi)核配置,運(yùn)行build_first.sh和build_final.sh在images目錄下生成image.rom image.ram.將image.rom拷貝到WINDOWS主機(jī),啟動(dòng)開(kāi)發(fā)板,輸入appprog ,打開(kāi)windows命令行狀態(tài),輸入tftp I put image.rom, 將內(nèi)核燒入開(kāi)發(fā)板內(nèi), 運(yùn)行RUN。20051129今天的最大的收獲就是顯示移植驅(qū)動(dòng)做好了, 經(jīng)過(guò)總結(jié),顯示的驅(qū)動(dòng)和以下幾個(gè)文件關(guān)系最大/home/uClinux-dist/linux-2.4.x/include/asm/arch/hardwa

12、re.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交叉編譯應(yīng)用程序應(yīng)加-elf2flt參數(shù)。例如:arm-elf-gc

13、c o a a.c elf2flt為了測(cè)試Framebuffer驅(qū)動(dòng)是否正常, 將編譯過(guò)的內(nèi)核燒入開(kāi)發(fā)板,運(yùn)行起來(lái), 在串口控制臺(tái)上輸入/bin/cp t240.bin /dev/fb0. 在LCD顯示出256色的240X320圖片。又編制了一個(gè)在240X320LCD上顯示圖片的程序(linuxdisp),程序代碼如下 #include<linux/fb.h>#include<unistd.h>#include<sys/mman.h>#include<sys/types.h>#include<sys/stat.h>#include&l

14、t;fcntl.h>unsigned char abc76800 = .略int main() int framebuffer_device;int line_size,buffer_size, i;char *screen_memory;/unsigned char buffer480000,j=0;struct fb_var_screeninfo var_info;struct fb_fix_screeninfo fix_info;framebuffer_device = open ( "/dev/fb0" , O_RDWR);ioctl (framebuffer

15、_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_i

16、nfo) = -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) =abci;sleep(2);return 0;將這個(gè)軟件放在/home/uClinux-dist/user/myapp下, 制作makefile。如下CC=arm-el

17、f-gccEXEC = linuxdispoBJS = linuxdisp.c#LDFLAGS=-L/home/uClinux-dist/uClibc/liball: $(EXEC)$(EXEC): $(OBJS)$(CC) $(LDFLAGS) -o $ $(OBJS) $(LDLIBS)-elf2fltromfs:$(ROMFSINST) /bin/$(EXEC)clean:-rm -f $(EXEC) *.elf *.gdb *.o執(zhí)行make,編譯成功。將執(zhí)行文件linuxdisp拷貝進(jìn)/home/romfs/bin下,重新編譯內(nèi)核燒入開(kāi)發(fā)板,執(zhí)行/bin/linuxdisp.程序正常

18、運(yùn)行。在LCD上正常顯示圖片。經(jīng)過(guò)這幾步測(cè)試可以說(shuō)Framebuffer驅(qū)動(dòng)的移植成功了。下一步將進(jìn)行MINIGUI的移植。 2005122MINIGUI的移植現(xiàn)在正式開(kāi)始了。它的顯示結(jié)果將影響我對(duì)它的信心。1 安裝資源文件:tar zxvf minigui-res-1.3.0.tar該命令將建立minigui-res-1.3.0目錄。Cd minigui-res-1.3.0Make install2 配置和編譯minigui:tar zxvf libminigui-1.3.3.tar.gz,該命令將建立libminigui-1.3.3目錄。Cd libminigui-1.3.3./confi

19、guremakemake install修改/etc/ ld.so.conf在最后添加/usr/local/libldconfig3 編譯并運(yùn)行MINIGUI演示程序:tar zxvf mde-1.3.0.tar.gztar zxvf mg-samples-1.3.0.tar.gzcd mde-1.3.0./configuremake修改/usr/local/etc/ MiniGUI.cfg 將mdev=/dev/mouse改為mdev=/dev/mouse0保存退出。(FC3的緣故)。在PC上成功演示2005-12-9為了調(diào)試應(yīng)用程序方便, 先做一下NFS的先期準(zhǔn)備。先修改/etc/expo

20、rts,假如要增加/uclinux目錄為與其他主機(jī)共享的目錄。增加一條: /uclinux 192.168.111.x(rw,sync), 關(guān)閉放火墻。/etc/rc.d/init.d/portmap start/etc/rc.d/init.d/./nfs startexportfs a檢查是否已經(jīng)啟動(dòng)NFS服務(wù)。 Mount 1:/uclinux /mnt配置uclinux時(shí),配置內(nèi)核 進(jìn)入file system選項(xiàng)* nfs file system support* provide nfsv3 client support配置用戶選項(xiàng) 進(jìn)入network appl

21、ications* portmap進(jìn)入busybox選項(xiàng)* mount* mount: support nfs mounts內(nèi)核編譯。啟動(dòng)uclinuxportmap &mount t nfs o rsize=1024,wsize=1024,timeo=3,udp 1:/uclinux /mnt/yaffs/sample 進(jìn)入/mnt/yaffs/sample, 就能看見(jiàn)主機(jī)上uclinux下的文件,執(zhí)行其中的執(zhí)行文件,一切OK。2005-12-13這幾天最大的收獲是MINIGUI移植到開(kāi)發(fā)板上的成功,令我非常振奮。移植針對(duì)的版本是minigui1.3.3。這

22、個(gè)版本是目前飛漫開(kāi)源最徹底的版本了。我的開(kāi)發(fā)板上的顯示器采用的是256色LCD,我針對(duì)我的開(kāi)發(fā)板的條件,編寫了相應(yīng)的運(yùn)行腳本:domain.sh#!/bin/shrm config.cache config.status -fCC=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/li

23、b/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-new

24、gal -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-

25、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 -d

26、isable-nativegalqvfb -with-osname=uclinux運(yùn)行該腳本, 然后make, make install, ldconfig。先編譯例子中最簡(jiǎn)單的helloworld.c下到板中運(yùn)行,提示錯(cuò)誤 /bin> helloworldNo 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: fai

27、led 256經(jīng)過(guò)跟蹤,進(jìn)入sysres/mgedt.c#include "common.h"typedef struct _ETCSECTIONint 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

28、_Sint section_nr; /* number of sections */PETCSECTION sections; /* pointer to section arrays */ ETC_S;#ifdef _INCORE_RESstatic char *SYSTEM_KEYS = "gal_engine", "ial_engine", "mdev", "mtype"#ifdef _ECOSstatic char *SYSTEM_VALUES = "ecoslcd", "ip

29、aq", "/dev/ts", "none"#else/static char *SYSTEM_VALUES = "qvfb", "qvfb", "/dev/ts", "none" /這是我注釋掉的原來(lái)的, 你們看看程序結(jié)構(gòu),不管我怎么配置NEWGAL,/這里都將不可避免的進(jìn)入QVFBstatic char *SYSTEM_VALUES = "fbcon", "dummy", "none", "n

30、one" /我新加的。#endifstatic char *FBCON_KEYS = "defaultmode"static char *FBCON_VALUES = "240x320-8bpp" /原來(lái)的是240X320-16bppstatic char *QVFB_KEYS = "defaultmode", "display"static char *QVFB_VALUES = "640x480-16bpp", "0"static char *SYSTEMFON

31、T_KEYS ="font_number", "font0", "font1", "font2", "default", "wchar_def", "fixed", "caption", "menu", "control"static char *SYSTEMFONT_VALUES ="3","rbf-fixed-rrncnn-6-12-ISO8859-1"

32、, "*-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_KEY

33、S = "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 = &

34、quot;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, "f

35、bcon", 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_K

36、EYS, 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 */修改后編譯并運(yùn)行。仍然提示錯(cuò)誤。/bin> helloworldMAP_S

37、HARED not supported (cannot write mappings to disk) /這條一看就知道在MMAP使用了不適合uClibc庫(kù)的參數(shù), 此項(xiàng)應(yīng)該設(shè)置為0NEWGAL: 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后來(lái)經(jīng)過(guò)跟蹤。在/libminigui

38、-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); #elsemapped_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); #el

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論