【问题标题】:Trying to open console on LCD using fbcon and USB keyboard尝试使用 fbcon 和 USB 键盘在 LCD 上打开控制台
【发布时间】:2014-02-12 10:29:52
【问题描述】:

(哇,由于特殊字符的格式问题,我花了一段时间才发布这个问题..)

我正在尝试在我们的嵌入式系统的 LCD usnig USB 键盘上启动虚拟终端,该键盘也连接到系统。我的电脑有 UART 连接,所以我一直使用 UART 作为控制台,但我想在启动期间切换到 LCD 上的帧缓冲区控制台..

USB 主机控制器似乎工作正常,因为我已经看到 USB 存储器已连接、读取和写入正常。当我连接键盘并在keyboard_event函数中打印事件时,它会打印看起来正常且与我的操作相对应的事件(键的类型,按下或释放..)

我感觉是配置问题。在init/main.c中,有
run_init_process(ramdisk_execute_command);
(在我的例子中,ramdisk_execute_command = "/sbin/init")

这会立即调用
kernel_execve(init_filename, argv_init, envp_init);
// 上面,init_filename 和 argv_init 是 "/sbin/init" 一样的。

我希望busybox在此之后运行..(之前已通过类似引导加载程序的部分安装了ramdisk)但在此之后我在LCD上看不到任何打印。但是直到调用上面的 kernel_execve 之前,我才能在 LCD 上看到 printks。我使用的是 linux 3.3。

我知道我必须在 LCD 上打开帧缓冲控制台并将其连接到 tty,但我不知道如何操作。下面打印了当前的相关设置。 (在串行 UART 连接的情况下,linux 启动正常,直到 kernel_execve 调用后在busybox 初始化中打印内容的最终busybox shell 提示符。并且#cat /proc/fb0 为您的信息返回0。只有LCD/framebuffer 控制台模式在kernel_execve 之后停止。)

#### arch/sparc/boot/ourprocessor/prom_stage.c : #####
// "console=ttyS,mmio,0xff003000,115200n8 "        <== serial port case
"console=tty "                        <= frame buffer console case (below line too)
"fbcon=font:SUN8x16,map:0000 "               <= Is this boot argment correct?..

#### sbin/init: #####
#!/bin/busybox sh
export LD_LIBRARY_PATH=/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/nand/lib

exec /bin/busybox init
### rcS #####
mknod /dev/tty0 c 4 0 <== Do I need to explicitly make tty0 and tty1 like this?
mknod /dev/tty1 c 4 1
mknod /dev/tty2 c 4 2
mknod /dev/tty3 c 4 3
mknod /dev/tty4 c 4 4

### .config #####
CONFIG_FRAMEBUFFER_CONSOLE=y <= LCD/framebuffer console case. Otherwise none.
CONFIG_FONT_SUN8x16=y
CONFIG_LOGO=y

顺便说一句,我没有使用 /etc/inittab。(所以使用默认初始化)。 busybox init/init.c 代码说如果没有 inittab 文件并且控制台不是串口,它运行
tty2::askfirst:/bin/sh
tty3::askfirst:/bin/sh
tty4::askfirst:/bin/sh
(在 tty 2、3 和 4 上启动 shell)然后如何使 tty2 的 shell 出现在 LCD/framebuffer/framebuffer 控制台上?这很令人困惑,书也不那么友善..

任何提示将不胜感激。

【问题讨论】:

    标签: console embedded-linux lcd


    【解决方案1】:

    这个问题几个月前就解决了,我忘了自己回答这个问题。 添加 CONFIG_FRAMEBUFFEr 和 CONFIG_FBCONSOLE 并设置 console=ttyS,.. 就足够了。就我而言,我在 DMA 中有另一个错误导致帧缓冲区控制台的文本没有出现在 LCD 上。所以默认情况下我可以在 LCD 上使用 3 个虚拟控制台(使用 Alt-F2、Alt-F3、.. 切换)。长话短说,控制台是一个控制台(在串行端口上),我们在 LCD 上有 3 个(默认为busybox设置)虚拟控制台。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-30
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      相关资源
      最近更新 更多