加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Debian编译安装Linux Kernel及串口操作Linux系统

(2013-07-29 21:25:32)
标签:

debian-6.07

linux-2.6.38

串口

分类: 嵌入式虚拟化

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

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

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

http://s12/mw690/70dd1691tx6Bru0vUP9cb&690Kernel及串口操作Linux系统" TITLE="Debian编译安装Linux Kernel及串口操作Linux系统" />

下载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。

示意图如下:

http://s3/mw690/70dd1691tx6BrujXEvE22&690Kernel及串口操作Linux系统" TITLE="Debian编译安装Linux Kernel及串口操作Linux系统" />

生成内核压缩镜像:

$make bzImage

编译模块并安装模块:

$make modules

$sudo make modules_install

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

http://s13/mw690/70dd1691tx6Bruuv5Za4c&690Kernel及串口操作Linux系统" TITLE="Debian编译安装Linux Kernel及串口操作Linux系统" />

安装Linux内核到/boot目录

$sudo make install

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

http://s11/mw690/70dd1691tx6BruyGQxs3a&690Kernel及串口操作Linux系统" TITLE="Debian编译安装Linux Kernel及串口操作Linux系统" />
通过观察上图,再和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

示意图如下:

http://s5/mw690/70dd1691tx6BruXnGKw64&690Kernel及串口操作Linux系统" TITLE="Debian编译安装Linux Kernel及串口操作Linux系统" />
更新Debian Grub启动配置文件grub.cfg:
$sudo /usr/sbin/update-grub
示意图如下:

http://s16/mw690/70dd1691tx6Brv5gWePaf&690Kernel及串口操作Linux系统" TITLE="Debian编译安装Linux Kernel及串口操作Linux系统" />
理论上到目前为止,Linux-2.6.38内核已经运行了,事实也正是如下,示意图如下:

http://s11/mw690/70dd1691tx6BrvcZAiS5a&690Kernel及串口操作Linux系统" TITLE="Debian编译安装Linux Kernel及串口操作Linux系统" />

备注:但是原来的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版本的内核则不存在这样的问题。

http://s7/mw690/70dd1691tx6Brvo1j70d6&690Kernel及串口操作Linux系统" TITLE="Debian编译安装Linux Kernel及串口操作Linux系统" />
至此,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 ro  console=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
示意图如下:
http://s14/mw690/70dd1691tx6Brx8jE6N4d&690Kernel及串口操作Linux系统" TITLE="Debian编译安装Linux Kernel及串口操作Linux系统" />
2.3 允许Debian/Linux用户通过串口登陆
通过阅读/etc/securetty配置文件,我们发现:
Debian-6.07允许用户通过串口0,1,2,3,4,5操作Linux系统,示意图如下:
http://s2/mw690/70dd1691tx6Brxwj2zD31&690Kernel及串口操作Linux系统" TITLE="Debian编译安装Linux Kernel及串口操作Linux系统" />
至此,我们就可以通过串口终端操作Linux系统了。

参考资料:

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有