分享

05年学习arm?linux的笔记

 cana_xzy 2010-05-20
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     128k
param           : 0x00020000    0x00010000      64k
kernel          : 0x00030000    0x001d0000       1M+832k
root            : 0x00200000    0x01000000      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/作为字库目录)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多