linux设置BIOS串口,将x86平台的Linux控制台重定向到串口

本文详细指导如何在没有鼠标、键盘和显示器的设备上,利用串口配置Ubuntu 14.04 Linux系统。重点讲解了grub配置与登陆配置,包括查找可用串口、设置启动参数、修改grub文件和ttyS0.conf。遇到的关键步骤包括测试串口、配置console参数和禁用图形界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般地,安装在PC的Linux是使用鼠标、键盘作为输入源,显示器作为输出显示,但有些X86的设备,如工控机等,为了节省成本,会去掉认为无用的外设接口,以致熟悉了PC的人不习惯。一个设备,没有鼠标、键盘、显示器,但只要还有串口,还是可以控制的。本文将在一个具备串口的设备上配置Linux系统,以便将控制台重定向到串口。Linux使用ubuntu14.04发行版本。

需要改动的地方有2处,一是grub配置,二是登陆配置。当然,还有一个重要前提,就是串口能正常工作。

说来惭愧,由于板子不具备一般人所认为的SDK,——我们觉得板子自带有资料、SDK开发包是理所当然的,但实际上,有些却不然。为了测试哪个串口设备可用,我使用串口口调试助手逐一发送数据到指定的串口设备文件(命令如echo "latelee" > /dev/ttyS0),幸好只测试到第3个设备文件即能成功,否则,还有一直测试下去(在/dev/目录下有32个ttyS设备,启动信息看到共有6个设备)。因此找到正确、正常能用的串口设备是最关键的。实际中,可能ttyS0可用,也可能ttyS2可用。下面以ttyS0为例说明。

通常情况下,波特率等参数是115200n8,有些配置内核时好像看到过,但没什么印象。

使用root权限,先备份好已有文件。

/etc/default/grub:配置

update-grub:

/boot/grub/grub.cfg:

1、创建登陆配置文件

创建/etc/init/ttyS0.conf文件(如是其它串口,所有的ttyS0都改为ttySx,文件名也是ttSx.conf),下面是ttyS2.conf文件的内容,如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15# ttyS2 - getty

#

# This service maintains a getty on ttyS2

description "Get a getty on ttyS2"

start on stopped rc RUNLEVEL=[2345] and (

not-container or

container CONTAINER=lxc or

container CONTAINER=lxc-libvirt)

stop on runlevel [!2345]

respawn

# no one will auto login(不自动登陆)

exec /sbin/getty -L 115200 ttyS2

# auto login as root or latelee

#exec /sbin/getty -a root -L 115200 ttyS2

#exec /sbin/getty -a latelee -L 115200 ttyS2

2、修改内核启动参数

ubuntu说不能直接修改/boot/grub/grub.cfg文件(实际上我改过,也没什么事情),而是改/etc/default/grub文件,然后执行命令update-grub,即会自动更新grub.cfg文件。修改的地方有几个。

启动参数:

1GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"

配置串口控制台:

1

2

3

4

5# Uncomment to disable graphical terminal (grub-pc only)

GRUB_TERMINAL=console

# my add

GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

完整的文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34# If you change this file, run 'update-grub' afterwards to update

# /boot/grub/grub.cfg.

# For full documentation of the options in this file, see:

# info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0

#GRUB_HIDDEN_TIMEOUT=0

#GRUB_HIDDEN_TIMEOUT_QUIET=true

GRUB_TIMEOUT=1

GRUB_DISTRIBUTOR=\`lsb_release -i -s 2/dev/null || echo Debian\`

# this is for vga text

#GRUB_CMDLINE_LINUX_DEFAULT="quiet text"

#GRUB_CMDLINE_LINUX=""

# my serial console

GRUB_CMDLINE_LINUX_DEFAULT="consol=tty0 console=ttyS2,115200n8"

GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs

# This works with Linux (no patch required) and with any kernel that obtains

# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)

#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)

GRUB_TERMINAL=console

# my add

GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

# The resolution used on graphical terminal

# note that you can use only modes which your graphic card supports via VBE

# you can see them in real GRUB with the command `vbeinfo'

#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux

GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries

#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start

#GRUB_INIT_TUNE="480 440 1"

说明: GRUB_DISABLE_LINUX_UUI是指在指定根分区时,不使用该分区的UUID,而是直接用如/dev/sda2的格式。

3、更新grub

直接执行命令update-grub即可。

修改后的grub.cfg文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-e5b19d4d-199f-4426-bab9-0b0c02b54317' {

recordfail

load_video

gfxmode $linux_gfx_mode

insmod gzio

insmod part_msdos

insmod ext2

set root='hd0,msdos1'

if [ x$feature_platform_search_hint = xy ]; then

search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 a5c5a770-5bae-453c-a888-f83781fcaa1f

else

search --no-floppy --fs-uuid --set=root a5c5a770-5bae-453c-a888-f83781fcaa1f

fi

linux /vmlinuz-3.13.0-32-generic root=/dev/sda1 ro console=tty0 console=ttyS2,115200n8

initrd /initrd.img-3.13.0-32-generic

可以看到,内核启动参数已经配置成功。

另外,为了防止系统挂掉,可以运行update-grub后再手动改/boot/grub/grub.cfg文件,不要所有的启动项都是串口控制台,实际上有恢复模式可选,不改也行。我是把·Advanced options for Ubuntu·里面的配置改回原来的。

重新启动系统,查看启动参数

1

2

3

4

5# cat /proc/cmdline

BOOT_IMAGE=/boot/vmlinuz-3.13.0-32-generic root=/dev/sda1 ro console=tty0 console=ttyS2,115200n8

# who

latelee ttyS2

存疑:上面的grub配置,有2个console,分别是tty0和ttyS2,它们不匹配,但启动后也没什么问题,看到的终端还是ttyS2,不知道是什么原因。估计和启动参数的tty0关系不大,主要看ttyS2.conf配置。

说明:如果还是接有显示器,显示器依然有输出,Alt+Ctrl+1还是tty1,Alt+Ctrl+2还是tty2,原来是什么样子,还是什么样子。

遗留问题:串口控制台只能显示24x80(用secureCRT测试所得),有些命令太长则会回滚到一行的开始,虽然也是成功的,但影响了信息的提示,目前还不知道怎么改,在哪里改。

参考资料:

https://help.ubuntu.com/community/SerialConsoleHowto

李迟,发表于2014年10月22日中午休息前

<think>我们正在讨论的是在QEMU虚拟机中安装银河麒麟系统时如何进入BIOS设置界面。根据提供的引用信息,虚拟机使用的是QEMU模拟的ARM架构(具体是cortex-a76处理器),并且使用了EFI固件(-bios参数指定了QEMU_EFI.fd文件)。在QEMU中,通常可以通过在启动时按下特定按键来进入BIOS(或UEFI)设置界面。 在QEMU中,进入UEFIBIOS设置界面的常用方法是在启动过程中按下`Esc`键或`F2`键。但是,由于QEMU的UEFI固件(如QEMU_EFI.fd)通常使用EDK II,其启动时进入设置界面的按键可能因版本而异。常见的按键包括: -对于ARM架构的虚拟机,通常使用`Esc`键进入UEFI设置。-有时也可能是`F2`键。然而,在QEMU启动时,我们可以在控制台看到提示信息,提示按哪个键进入设置。因此,我们需要在启动过程中注意观察控制台输出。 具体操作步骤:1.启动QEMU虚拟机(使用你提供的命令行,但可能需要调整以确保我们可以看到启动信息并能够输入按键)。 2.在虚拟机启动初期(通常在显示UEFI固件信息时),快速按下`Esc`键(或`F2`键)多次,直到进入UEFI设置界面。 注意:由于QEMU启动速度可能很快,我们需要在启动后立即按键。如果错过了,可以关闭虚拟机再重新启动尝试。 另外,根据你提供的命令,虚拟机启动时会从ISO镜像启动(因为命令中指定了CDROM设备),因此我们可以在启动过程中尝试按键。如果上述方法不奏效,我们可以尝试在QEMU命令中添加`-no-reboot`和`-no-shutdown`参数,以便在虚拟机退出时保持窗口,这样我们可以更清楚地看到启动信息。同时,确保没有使用`-nographic`或`-curses`等参数,这些参数会禁用图形界面,导致我们无法看到启动画面和输入按键。因此,建议的命令行修改(在原有基础上确保图形界面输出,并注意启动时按键): ```bashqemu-system-aarch64.exe -m8192-cpucortex-a76 -smp8,sockets=4,cores=2-Mvirt -biosC:\work\vm\QEMU_EFI.fd-deviceVGA-devicenec-usb-xhci-deviceusb-mouse-deviceusb-kbd-driveif=none,file=C:\work\vm\kylindisk.qcow2,id=hd0-devicevirtio-blk-device,drive=hd0 -drive if=none,file=C:\work\vm\Kylin-Desktop-V10-SP1-General-Release-2303-ARM64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom```启动后,观察虚拟机窗口,在出现固件信息(比如UEFI版本信息、硬件初始化信息)时,立即按下`Esc`键或`F2`键,应该可以进入UEFI设置界面。如果仍然无法进入,可以尝试在QEMU命令中增加`-S`参数(在启动时暂停),然后使用QEMU监视器继续运行(按下`Ctrl+Alt+2`切换到监视器,输入`c`继续),这样可以在继续运行后立即按键。但这种方法需要快速切换和按键,操作较为复杂。另一种方法是使用串口重定向,然后通过串口查看启动信息,但这样可能更复杂。因此,建议先尝试在图形界面启动时按`Esc`或`F2`。总结:在QEMU启动ARM虚拟机时,通常按`Esc`键可以进入UEFI设置界面。§§相关问题§§1.在QEMU虚拟机中安装银河麒麟系统时,如何修改启动顺序? 2.如何为QEMU虚拟机配置网络以安装银河麒麟系统?3.在银河麒麟系统安装过程中遇到无法识别硬盘的问题,如何解决?</think>### 如何在QEMU虚拟机中进入银河麒麟的BIOS设置界面 在QEMU虚拟机中进入银河麒麟系统的BIOS界面,需在启动阶段按下特定按键。根据ARM架构虚拟机的特性,操作步骤如下: 1. **启动虚拟机** 执行您提供的QEMU命令启动虚拟机: ```bash qemu-system-aarch64.exe -m 8192 -cpu cortex-a76 -smp 8,sockets=4,cores=2 -M virt -bios C:\work\vm\QEMU_EFI.fd -device VGA ...(其他参数) ``` 2. **关键时机** 当虚拟机屏幕出现 **UEFI固件启动画面**(通常显示QEMU EFI或EDK II标识)时,立即执行下一步操作。此画面仅持续 **2-5秒**,需快速响应。 3. **进入BIOS的按键** **ARM架构需按 `ESC` 键**(非x86的Del/F2键): - 在启动画面出现瞬间,**连续多次敲击键盘ESC键** - 若成功进入,会显示 **UEFI交互式Shell** 或 **BIOS设置菜单** 4. **失败处理** - 若错过时机:关闭虚拟机重新启动 - 添加调试参数:在命令中加入 `-serial stdio` 查看实时日志 - 验证固件:确认 `-bios` 参数指向的 `QEMU_EFI.fd` 文件路径正确[^1][^2] > ⚠️ 注意:银河麒麟ARM版使用 **UEFI固件** 而非传统BIOS设置界面为文本模式(非图形界面),通过方向键和回车操作。 ### 操作示意图 ``` [QEMU启动流程] │ ├─ 固件初始化 (显示EDK II/ARM LOGO) │ ↓ │ 黄金时间窗 → 连续按ESC键 (成功率90%) │ ↓ └─ 成功进入 → UEFI BIOS设置界面 失败 → 重启虚拟机重试 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值