|
From:http://blog.sina.com.cn/s/blog_537bca2a010007p1.html
應該是04年開始做linux,開始一段時間也裝過wince,不過還是linux適合小公司。那時候認識了楊斌,光顧了他前期的產(chǎn)品,現(xiàn)在他的2440也不錯。。這個毅然辭職做生意的,開了基地后只剩幾百元,到現(xiàn)在小有規(guī)模了,也是不容易啊。 linux,做出xfree86的移植后就再也沒有研究了。其中各種GUI都裝了一遍,也移植了幾個軟件,不過還是處于入門階段。筆記很凌亂,該做wince,就不再整理了。
mount -o loop -t iso9660 mount iso mode ============================================================================================================================ ifconfig eth1 192.168.0.50 /etc/init.d/vsftpd start ============================================================================================================================ kernel:開啟character->Virtual terminal 出現(xiàn)Console drivers(選擇vga console text就會編譯出錯:charmap) ============================================================================================================================ vivi:開啟private data->support vivi private data會導致: CONFIG_PARSE_PRIV_DATA=y lib/priv_data/rw.c : init_priv_data(void) : #ifdef CONFIG_PARSE_PRIV_DATA ret_saved = load_saved_priv_data(); 改寫內(nèi)核partition地址、大小 關閉CONFIG_PARSE_PRIV_DATA,就只遵循arch/s32410/smdk.c : mtd_partition_t default_mtd_partitions[]設置 priv_data應該就是kernel/devices/mtd/nand/smc_s3c2410.c: static struct mtd_partition smc_partitions[] = { ============================================================================================================================ C-A,S 使用load flash kernel x調(diào)用xmodem下載kernel param show param set xmodem_initial_timeout 3000000 編輯vivi/arch/s32410/smdk.c : { "xmodem_initial_timeout", 300000, NULL },中300000-》3000000延長超時時間 ============================================================================================================================ make modules->生成module ============================================================================================================================ =========================================== IDE =========================================== 修改hdreg.h中各個hd寄存器地址---8000000。。。 hd.c-》line:285 unsigned short port; port=HD_DATA; 付值錯誤,修改為unsigned long port;
打開 ATA/IDE/MFM/RLL support ---> IDE, ATA and ATAPI Block devices ---> Use old disk-only driver on primary interface 開通 CONFIG_BLK_DEV_HD_IDE=y CONFIG_BLK_DEV_HD=y ////////////////////////////////////////////////// kernel/include/asm-arm/ide.h : #define ide_default_io_base(i) ((ide_ioreg_t)0)---->>>>#define ide_default_io_base(i) ((ide_ioreg_t)0x8000000 #define ide_default_irq(b) (IRQ_EINT3)
arm/arch-sh-s3c2410/ide.h: 修改成 hw->io_ports[IDE_DATA_OFFSET] = reg + n*2;(2410 16位尋址數(shù)據(jù)舍去最低一位,從第2位開始)
修改base地址, 映射外部地址,ide.c: base = ide_default_io_base(index);----------->>>>>base = ioremap(ide_default_io_base(index), 32);
加入外部中斷,ide-probe.c: init_irq---》》 int ret = set_external_irq(IRQ_EINT3, EINT_RISING_EDGE, EINT_PULLUP_DIS); if (ret) return ret;
=============================================== FB =============================================== 出現(xiàn)Unable to handle kernel NULL pointer dereference at virtual address 00000024的錯誤,因為drivers/video/fbcon.c中: #define fontwidthvalid(p,w) ((p)->dispsw->fontwidthmask & FONTWIDTH(w))與s3c2410fb.c中: static struct s3c2410fb_mach_info xxx_stn_info __initdata = { pixclock: 174757, bpp: 16,//有不同 修改bpp->4解決問題 ============================================================================================================================ 打開 Memory Technology Devices (MTD) ---> RAM/ROM/Flash chip drivers ---> Support for RAM chips in bus mapping 就可以看到lcd顯示 ============================================================================================================================ bulid in s3c2410 lcd modules才會顯示LOGO
LCD1_CLKVAL(x) 閃爍頻率 LCD5_BSWP 交換byte高低位 LCD5_HWSWP高低4比特交換 LCD5_INVVD反色 ============================================================================================================================ 4 bit:
修改s3c2410fb.c : new_regs.lcdcon3 = (fbi->reg.lcdcon3 & ~LCD3_HOZVAL_MSK) | LCD3_HOZVAL((var->xres) * (inf->bpp) / 16 - 1); new_regs.lcdsaddr2 = LCDADDR_BASEL( (((unsigned long)VideoPhysicalTemp >> 1) + ((var->xres) * (inf->bpp) / 16 * (var->yres)))); new_regs.lcdsaddr3 = LCDADDR_OFFSET(0) | (LCDADDR_PAGE((var->xres) * (inf->bpp)/ 16)); LOGO圖片能顯示 ============================================================================================================================ lcdcon5:加入LCD5_BSWP
修改fbcon-cfb4.c: #elif defined(__LITTLE_ENDIAN)后面的表為: 0x0000,0x0f00,0xf000,0xff00, 0x000f,0x0f0f,0xf00f,0xff0f, 0x00f0,0xf0f0,0x0ff0,0xfff0, 0x00ff,0x0fff,0xf0ff,0xffff 字符顯示正常
============================================================================================================================ 18 bit:
bpp: 16, lcdcon1 : LCD1_BPP_16T | LCD1_PNR_TFT | LCD1_CLKVAL(3), lcdcon2 : LCD2_VBPD(1) | LCD2_VFPD(2) | LCD2_VSPW(32), lcdcon3 : LCD3_HBPD(6) | LCD3_HFPD(2), lcdcon4 : LCD4_HSPW(4), lcdcon5 : LCD5_FRM565 | LCD5_INVVLINE | LCD5_INVVFRAME | LCD5_HWSWP | LCD5_PWREN, new_regs.lcdcon3 = (fbi->reg.lcdcon3 & ~LCD3_HOZVAL_MSK) | LCD3_HOZVAL((var->xres) * 24/ 16 - 1); //debug new_regs.lcdsaddr2 = LCDADDR_BASEL( (((unsigned long)VideoPhysicalTemp >> 1) + ((var->xres) * 24 / 16 * (var->yres)))); new_regs.lcdsaddr3 = LCDADDR_OFFSET(0) | (LCDADDR_PAGE((var->xres) * 24/ 16));
display->line_length = var->xres * 3;
fbi->max_bpp = 24; 修改LCD2_VSPW加大到(32),適合18位色顯示 ============================================================================================================================ 去掉vivi/arch/s3c2410/smdk.c : char linux_cmd[] = "noinitrd root=/dev/bon/2 init=/linuxrc console=ttyS0"; console=ttyS0讓其不入串口控制臺,就可以進入FB 控制臺 ============================================================================================================================ busybox是多個linux命令集合,加入inittab文件到/etc中,使其不用defeault inittab值。 修改inittab中askfirst 為 once就可以直接進入控制臺 ============================================================================================================================ 修改vivi/arch/s32410/smdk.c : "boot_delay"為1直接進入kernel,0直接進入vivi shell =============================================== NFS =============================================== name offset size flag ------------------------------------------------ vivi : 0x00000000 0x00020000 0 128k param : 0x00020000 0x00010000 0 64k kernel : 0x00030000 0x001d0000 0 1M+832k root : 0x00200000 0x01000000 4 16M
param set linux_cmd_line "noinitrd root=/dev/bon/2 init=/linuxrc"
download redhat-config-nfs.rpm安裝后可以使用nfs 屏蔽/etc/initd/Rcs關于網(wǎng)絡部分后, param set linux_cmd_line "root=/ nfsroot=192.168.0.50:/friendly-arm/root ip=192.168.0.69:192.168.0.50:192.168.0.50:255.255.255.0:matrix4.arm9.net:eth0:off" param set linux_cmd_line "console=ttyS0 root=/ nfsroot=192.168.0.50:/friendly-arm/root ip=192.168.0.69:192.168.0.50:192.168.0.50:255.255.255.0:matrix4.arm9.net:eth0:off" param set linux_cmd_line "noinitrd root=/dev/mtdblock/0 init=/linuxrc" param set linux_cmd_line "console=ttyS0 root=/dev/bon/3 init=/linuxrc" or param set linux_cmd_line "root=/ nfsroot=192.168.0.50:/friendly-arm/root ip=192.168.0.69:192.168.0.50:192.168.0.50:255.255.255.0:matrix4.arm9.net:eth0:off" param save boot 進入nfs系統(tǒng) ============================================================================================================================ cat /proc/mtd
PATH="/usr/local/arm/2.95.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin" PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin" =============================================== MINIGUI =============================================== 出現(xiàn)checking for C compiler default output... configure: error: C compiler cannot create executables. 是沒有設置好編譯器路徑 PATH=$PATH:/usr/local/arm/2.95.3/bin 還要設置好編譯器include、lib位置
/*不推薦 編譯寫libminigui的sh #!/bin/sh rm config.cache config.status -f
CC=/friendly-arm/2.95.3/bin/arm-linux-gcc \ CFLAGS="-Os -D__Linux__ -I/friendly-arm/2.95.3/arm-linux/include -L/friendly-arm/2.95.3/arm-linux/lib " \ LDFLAGS="-Wl,-L/friendly-arm/2.95.3/arm-linux/lib" \ ./configure --prefix=/friendly-arm/root/minigui \ --build=i386-linux \ --host=arm-linux \ --target=arm-linux \ --disable-shared \ --enable-static \ --disable-lite \ --disable-incoreres \ --enable-flatstyle \ --disable-newgal \ --enable-fblin1l \ --enable-fblin8 \ --enable-fblin16 \ --enable-fblin4 \ --enable-dummyial \ --enable-grayscreen \ --enable-tinyscreen \ --disable-vbfsupport */ 或者改menuconfig path、-L、-I 打開lite\大開alone,關閉incore ============================================================================================================================ 編寫mdeminigui的sh #!/bin/sh rm config.cache config.status -f LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH CC=/usr/local/arm-linux/bin/arm-linux-gcc \ CFLAGS="-I/usr/local/arm-linux/arm-linux/include -L/usr/local/arm-linux/arm-linux/lib" \ LDFLAGS="-L/usr/local/arm-linux/arm-linux/lib" \ ./configure --prefix=/usr/local \ --build=i386-linux \ --host=arm-linux \ --target=arm-linux ============================================================================================================================ 修改config.in AC_CHECK_HEADERS($prefix/include/minigui/common.h, have_libminigui=yes, foo=bar) #include <$prefix/include/minigui/common.h>
if test "x$lite_version" = "xyes"; then LIBS="$LIBS -lminigui -lm -lmgext -lc -lvcongui -L$prefix/lib" else CFLAGS="$CFLAGS -D_REENTRANT -I$prefix/include" LIBS="$LIBS -lminigui -lm -lmgext -lc -lpthread -ljpeg -lvcongui -L$prefix/lib" ============================================================================================================================ 修改main.c中 #include <minigui/dti.c>
修改2個原程文件的fb0->fb/0
建立var/tmp ============================================================================================================================ minigui ftp上下載arm-linux-2.1.X編譯器才能編譯 ============================================================================================================================ 放置好所有的include lib文件在目標文件系統(tǒng)上 ============================================================================================================================ 根據(jù)硬件特性修改libminigui1.2.3/etc/Minigui-3d.cfg和Minigui-flat.cfg文件中的 [fbcon] defaultmode=1024x768-16bpp 為相應的defaultmode=640x240-4bpp ============================================================================================================================ low level error: copy\修改etc/minigui。cfg 設置正確鼠標類型和路徑 #ial_engine=console ial_engine=dummy mdev=/dev/input/mouse0 #mtype=Microsoft #mtype=NONE mtype=PS2 #mtype=IMPS2 ============================================================================================================================ =============================================== MicroWindow =============================================== 使用/usr/local/arm/2.95.3/arm-linux/lib/libz.a makefile.rules加入-I/usr/local/arm/2.95.3/arm-linux/include -L/usr/local/arm/2.95.3/arm-linux/lib //////////////////////////////// file:/friendly-arm/microwindow/microwindows-0.90/src/drivers/scr_fb.c file:/friendly-arm/microwindow/microwindows-0.90/src/drivers/scr_rtems.c file:/friendly-arm/microwindow/microwindows-0.90/src/engine/devopen.c file:/friendly-arm/microwindow/microwindows-0.90/src/nanox/clientfb.c 查找fb0,改為fb/0 file:/friendly-arm/microwindow/microwindows-0.90/src/drivers/scr_fb.c file:/friendly-arm/microwindow/microwindows-0.90/src/drivers/vtswitch.c 查找tty0,改為tty
或者/etc/rcS: ln -s input/mouse0 psaux ln -s sound/dsp dsp ln -s sound/mixer mixer ln -s fb/0 fb0 ln -s vc/0 tty0 ln -s vc/1 tty1 ln -s vc/2 tty2 /////////////////////////////// 修改src/drivers/mou_ser.c: #define MOUSE_PORT "/dev/input/mice" #define MOUSE_TYPE "ps2" 就可以使用usb鼠標 make xconfig
編譯nxlib首先編譯linux-native版的microwindow(使用其中的libnano-x.so) 修改nxlib makefile:MWIN=/mnt/ext/microwindow/microwindows-0.90/src/ NOTE "make install" WILL BY DEFAULT OVERWRITE THE FOLLOWING FILES: /usr/X11R6/lib/libX11.so.* MWPF_TRUECOLOR565 not MWPF_TRUECOLOR0565
/mnt/ext/nanoxgtk/pixil_oe-1.00/src/w3c-libwww-5.2.8/Library/src/HTWWWStr.c:360: the use of `tmpnam' is dangerous, better use `mkstemp' /mnt/ext/nanoxgtk/pixil_oe-1.00//lib/libwwwcore.a(HTInet.o): In function `HTGetTmpFileName': /mnt/ext/nanoxgtk/pixil_oe-1.00/src/w3c-libwww-5.2.8/Library/src/HTInet.c:599: the use of `tempnam' is dangerous, better use `mkstemp' take place HTWWWStr:tmpname->mkstemp HTInet: //return tempnam(abs_dir, NULL); return abs_dir; -lmwengine -lmwdrivers -lmwfonts :microwin生成的
flnx要使用demo.sh才能進 appsintoserve是把nanox加入apps里,可以直接在控制臺運行
freetype-1.3.1要用arm-linux編譯, 方法一,首先配置: ./configure --enable-share --enable-static --prefix=/usr/local/arm/2.95.3 --host=arm-linux --build=i386 然后修改config.cache: ac_cv_prog_CC=${ac_cv_prog_CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc} ac_cv_prog_CPP=${ac_cv_prog_CPP='/usr/local/arm/2.95.3/bin/arm-linux-gcc -E'} ac_cv_prog_RANLIB=${ac_cv_prog_RANLIB=/usr/local/arm/2.95.3/bin/arm-linux-ranlib} 然后再配置configure一次 再修改test/makefile,跳過編譯test program,make install(libSM) 方法2: 修改configure: 在檢測if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } 前加入cross_compiling=no 后面補入cross_compiling=yes CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc ./configure --enable-share --enable-static --prefix=/usr/local/arm/2.95.3 --host=arm-linux --build=i386 修改ft_conf.h: #define SIZEOF_INT 0----->4 #define SIZEOF_LONG 0----->4
配置microwin的config: HAVE_FREETYPE_SUPPORT = Y INCFTLIB = /friendly-arm/microwindow/freetype/include LIBFTLIB = /friendly-arm/microwindow/freetype/lib/libttf.so FREETYPE_FONT_DIR = "/usr/local/microwin/fonts"(在目標機上建立目錄,copy相應字庫) #FREETYPE_FONT_DIR = "fonts/truetype"(這個是使用當前目錄/fonts/作為字庫目錄)
|