From:http://blog.sina.com.cn/s/blog_537bca2a010007p1.html
应该是04年开始做linux,开始一段时间也装过wince,不过还是linux适合小公司。那时候认识了杨斌,光顾了他前期的产品,现在他的2440也不错。。这个毅然辞职做生意的,开了基地后只剩几百元,到现在小有规模了,也是不容易啊。 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 出现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(); 改写内核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调用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位寻址数据舍去最低一位,从第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 =============================================== 出现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关于网络部分后, 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系统 ============================================================================================================================ 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 =============================================== 出现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文件在目标文件系统上 ============================================================================================================================ 根据硬件特性修改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/作为字库目录)
|