分类: LINUX
2009-10-08 13:06:00
前两天想让我的开发板(ARM 920T)挣脱PC机的控制,昨天是能让LCD显示控制台信息了,但是不能用USB键盘操作,今天有了新的进展了,USB键盘可以直接操作我的开发板。至此,我的控制台转移大告成功。为了让网友了解我的整个转移过程,我先把我昨天写的博客粘贴如下:
这两天一直想让我的开发板挣脱PC机的控制,把控制台移到LCD上去,然后用USB键盘作为输入,在LCD上构成一个终端。此刻有了一点点进展,于是把她记录下来,虽然我的开发板现在还不能用USB键盘作为输入设备(总提示“usb 1-1 device not accepting address....”等)。
我用的内核是linux2.6.14,硬件为ARM S3C2410.
1、在vivi源码arch/s3c24l0/smdk.C文件中作出相应的修改。
修改cmd_line为:
“char linux_cmd[] = "initrd root=/dev/mtdblock/2 init=/linuxrc console=tty0";”
这里的tty0能将lcd framebuffer0作为标准输出设备。
2、编译vivi。并将vivi下载到开发板的0分区。
3、修改内核:进入“Character devices”,勾选“[*] Support for console on virtual terminal”。再在Console device 里选中Framebuffer Support。最后屏蔽console on serial port选项,编译下载内核到1分区。
4、启动linux后,vivi就会把控制台交给LCD了。
注意:想通过把内核配置里“Boot options”项下面的“defaule kernel command string”子项更改为“initrd root=/dev/mtdblock/2 init=/linuxrc console=tty0”来达到目的是没用的。控制台是由“bootloader”来发言的,而不是内核,所以这里我们选择了更改vivi。
可能有人会和我遇到同样的情况:用vivi作bootloader后,会发现要向开发板下载文件比较麻烦,因为很难在网上找到能支持USB下载的vivi。我自己后来的做法是,在我买的开发板所自带的bootloader源码里有个叫的nand.c的程序,这个程序里有一行语句“ char *linux_params = "noinitrd root=/dev/mtdblock/2 init=/linuxrc console=ttySAC0 mem=64M devfs=mount";”,我把它改成“ char *linux_params = "noinitrd root=/dev/mtdblock/2 init=/linuxrc console=tty0 mem=64M devfs=mount";”,再在Windows下用ADS编译一下(或者你可以直接在linux下编译,但你得写个Makefile)。把生成的bin文件下载到开发板的0分区就KO了。这样你就不必担心自己因为用vivi就不能用USB下载文件了。
好,下面我就接着上面的写了:
修改内核文件driver/usb/host/ohci-s3c2410.c,在里面加入下面三条语句:
#include
#include
unsigned long upllvalue = (0x78<<12)|(0x02<<4)|(0x03);
再修改static void s3c2410_start_hc函数(还是这个文件),在这个函数中加入语句:
while (upllvalue !=__raw_readl(S3C2410_UPLLCON))
{
__raw_writel(upllvalue, S3C2410_UPLLCON);
mdelay(1);
}
就是上面一个简单的修改,让我的USB键盘有用了^_^。当然,这个成功要建立在你在配置内核时正确配置了相关的选项了。