linux 内核 增加串口,Debian编译安装Linux Kernel及串口操作Linux系统

本文首先研究在Debian-6.07系统上编译安装新的内核版本,并讨论在安装的过程中出现的问题以及解决方法;接着讨论将Linux内核输出信息重定向到串口,使得开发者可以从串口登录并操作Linux系统。

第一部分 Debian-6.07系统编译安装Linux-2.6.38内核

Debian-6.07预装的是Linux-2.6.32-6-686内核版本,示意图如下:

a4c26d1e5885305701be709a3d33442f.png

下载linux-2.6.38.tar.bz2:

ftp://ftp.kernel.org/pub/linux/kernel/v2.6/

解压内核:

$cd

/home/tom

$tar xvf

linux-2.6.38.tar.bz2

$cd

linux-2.6.38

配置内核:

$make

menuconfig

备注:进入配置界面后,直接退出,选择保存新的配置文件。目的是使用生成的配置文件.config。

示意图如下:

a4c26d1e5885305701be709a3d33442f.png

生成内核压缩镜像:

$make

bzImage

编译模块并安装模块:

$make

modules

$sudo make modules_install

备注:这一步需要把编译好的模块安装在/lib/modules/2.6.38目录下,所以需要用sudo获取root权限。由于在我的系统中已经在/etc/suders文件中为tom授予了root权限,所有用sudo命令可以暂时获取root权限。示意图如下:

a4c26d1e5885305701be709a3d33442f.png

安装Linux内核到/boot目录

$sudo make

install

备注:这一步需要把编译产生的内核安装在/boot/目录下,所以也需要暂时获取管理员root权限。示意图如下:

a4c26d1e5885305701be709a3d33442f.png

通过观察上图,再和Debian默认的2.6.32-5-686版本的内核相比较,我们可以看出如果想让Linux-2.6.38内核顺利替换Debian默认内核,还需要一个initrd.img-2.6.38文件。我们用下面的命令生成initrd.img-2.6.38

$sudo

/usr/sbin/update-initramfs –c –k 2.6.38

示意图如下:

a4c26d1e5885305701be709a3d33442f.png

更新Debian Grub启动配置文件grub.cfg:

$sudo

/usr/sbin/update-grub

示意图如下:

a4c26d1e5885305701be709a3d33442f.png

理论上到目前为止,Linux-2.6.38内核已经运行了,事实也正是如下,示意图如下:

a4c26d1e5885305701be709a3d33442f.png

备注:但是原来的Linux-2.6.32-6却无法启动,症状:grub启动显示到“loading

ramdisk…”就卡住了。经过测试发现Debian-6.07默认的Linux-2.6.32-6内核不支持:

“load_video

set_gfxpagload=keep”

属性,因此在grup-update生成的grub.cfg配置文件中,要将Linux-2.6.32-6对应的启动项的上述两行注掉,示意图如下。而对我们编译生成的Linux-2.6.38版本的内核则不存在这样的问题。

a4c26d1e5885305701be709a3d33442f.png

至此,Debian编译安装新内核的过程就介绍完了。Debian-6.07和其早期版本最大的不同是使用了grub-1.98版本作为系统的引导工具,这个版本的grub的一个亮点是可以使用/usr/sbin/update-grub

自动捕捉编译生成的操作系统内核和initramfs,自动生成/boot/grub/grub.cfg文件,这是传统的GRUB所做不到的。

第二部分 串口管理Debian Linux系统

2.1 将Linux kernal输出信息重定向串口

修改/boot/grub/grub.cfg的"linux

/boot/vmlinuz-2.6.38"行,在该行后添加:

console=ttyS0,

115200n8 console=tty0

kernel会将输出信息同时输出到串口和终端. 我的/boot/grub/grub.cfg文件修改过记录如下:

menuentry

'GNU/Linux, with Linux 2.6.38' --class gnu-linux --class gnu

--class os {

#

load_video

# set

gfxpayload=keep

insmod

gzio

insmod

part_msdos

insmod

ext2

set

root='(hd0,msdos1)'

search

--no-floppy --fs-uuid --set=root

96fc63dc-caf6-453d-a94e-60c1dc9741bf

echo 'Loading

Linux 2.6.38 ...'

linux

/boot/vmlinuz-2.6.38 root=UUID=96fc63dc-caf6-453d-a94e-60c1dc9741bf

roconsole=ttyS0, 9600n8 console=tty0

echo 'Loading

initial ramdisk ...'

initrd

/boot/initrd.img-2.6.38

}

在上面的例子中, 服务启动的信息会显示在终端上(tty0), 如果进入单用户模式,

也只会在终端(tty0)上提示输入tom密码, 如果需要将服务启动的信息也输出到串口上, 可修改两个console参数的顺序,

既修改为

console=tty0

console=ttyS0,9600n8

2.2 允许从串口登陆Linux系统

修改/etc/inittab文件,增加如下内容

T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100

示意图如下:

a4c26d1e5885305701be709a3d33442f.png

2.3 允许Debian/Linux用户通过串口登陆

通过阅读/etc/securetty配置文件,我们发现:

Debian-6.07允许用户通过串口0,1,2,3,4,5操作Linux系统,示意图如下:

a4c26d1e5885305701be709a3d33442f.png

至此,我们就可以通过串口终端操作Linux系统了。

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值