(哇我花了一段时间才发布这个问题,因为来自特殊字符的格式化问题......)
我正在尝试在我们的嵌入式系统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上看到任何打印。但是我可以在LCD上看到printks,直到上面调用kernel_execve之前。我正在使用linux 3.3。
我知道我必须在LCD上打开一个帧缓冲控制台并将其连接到tty,但我不知道如何。下面是打印当前的重新设置。 (在串行UART连接的情况下,Linux的靴子确定到最终的busybox kernel_execve通话后壳busybox的初始化提示打印的东西。和#cat的/ proc / FB0您的信息返回0。kernel_execve后只有LCD / FB控制台模式下停止工作。)
#### 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控制台上?令人困惑,书籍也不那么友善..
任何提示都会深受赞赏。
答案 0 :(得分:0)
这个问题几个月前就解决了,我忘了自己回答这个问题。 添加CONFIG_FRAMEBUFFEr和CONFIG_FBCONSOLE并设置console = ttyS,..就是必要的。在我的情况下,我在DMA中有另一个错误导致frambe缓冲控制台的文本没有出现在LCD上。所以我可以在LCD上使用3个虚拟控制台(默认使用Alt-F2,Alt-F3,...切换)。简而言之,控制台是一个控制台(在串行端口上),我们在LCD上有3个(默认为busybox设置)虚拟控制台。