目录
- 概述
- 第一章
- 1.1 平台环境
- 1.1.1 主机系统版本:
- 1.1.2 VMware Workstaion 软件版本:
- 1.2 下载ubuntu5.04 安装镜像
- 1.2.1 下载地址:
- 1.2.2 选择镜像:
- 1.3 安装ubuntu5.04
- 1.3.1 Step 1-新建虚拟机:
- 1.3.2 Step 2-进入ubuntu安装界面:
- 1.4 安装ubuntu5.04过程中出现的bug
- 1.4.1 BUG 1:安装完后,重启发现还需要再安装。
- 1.4.2 BUG 2: 安装过程中,出现找不到CDROM的情况:
- 1.4.3 BUG 3: 安装完成后,出现 X server相关问题
- 1.4.4 BUG 4: 安装过程中,出现连接不上网络的情况:
- 第二章
- 2.1 更新软件源
- 2.1.1 Step 1-修改root用户密码
- 2.1.2 Step 2-修改source.list
- 2.1.2.1 source.list文件修改规则
- 2.1.2.2 寻找合适的软件源地址
- 2.1.2.3 动手修改
- 2.1.2.4 修改hosts
- 2.2 安装 linux-headers 搭建编译环境
- 2.2.1 安装 linux-headers(kernel-2.6.10源码)
- 2.2.2 搭建编译环境:
- 2.2.3 测试编译及安装驱动:
- 2.3 安装vmwaretools实现与主机共享文件
- 2.3.1 挂载vmwaretools的相关镜像到CDROM
- 2.4 安装 openssh-server ,实现主机下mobaxterm访问虚拟机
概述
由于学习《Linux Device Drivers 3rd Edition》这本书时,其中使用的环境为linux 2.6.10,为了可以测试书中的案例程序,更好的学习这本书,因此想搭建linux2.6.10的环境。
搭建该环境的方法有很多种,可以通过安装流行的ubuntu版本,再在ubuntu里面使用qemu搭建虚拟机,移植linux2.6.10;或是买一块板子移植linux2.6.10;为了简单起见(其实并不简单),不需要过多关注系统移植,可以直接在vmware workstation中搭建ubuntu5.04,该系统使用的linux版本就是2.6.10。
该文共分为两章,第一章为简单安装ubuntu5.04,第二章为进一步搭建编译内核模块的环境,及ubuntu5.04的源更新,及安装vmwaretools以方便与主机互传文件,及安装openssh-server方便通过mobaxterm连接ubuntu。
文本内容若有不足,还望各位同仁不吝赐教。
By Jax
2022年7月3日
coolbeaner@126.com
第一章 1.1 平台环境 1.1.1 主机系统版本:
该版本并无要求,能跑 VMware Workstaion固定版本就行。
1.1.2 VMware Workstaion 软件版本:网上找到的资料8.x版本也能安装ubuntu5.04,尝试过是可以的,因为ubuntu5.04发布时间为2005年,因此大于2005年的版本应该都可以,尽量选择高版本,高版本一般会向下兼容。
1.2 下载ubuntu5.04 安装镜像 1.2.1 下载地址:- 由于该版本比较老,因此不太容易找到,以下是ubuntu官方维护的网站,应该是长久支持的:
- https://old-releases.ubuntu.com/releases/
- 选择 Ubuntu 5.04 (Hoary Hedgehog)
Hoary 是该版本的名字,该名字很重要的,后续修改源的时候会用到。
选择 Install CD版 ,因为live CD版我尝试过,只是安装后进入系统,下次启动还需要挂载CDROM,且重新安装,有点类似U盘装win10的轻版操作系统WINPE,因此upZ选择install版。
- 选择CPU架构,这里其实也无所谓,虚拟机会模拟的,但powerpc我没安装过。upZ选择AMD64。
- 下载完毕。
- 在VMware Workstaion中点击创建新的虚拟机 or 点击左上角文件–>新建虚拟机。
- 点击 自定义,之后点击下一步。
- 硬件兼容选择16.x就可以,8.x的upZ尝试过也可以,8.x一下没有尝试过。
- 选择刚才下载的镜像存放路径,upZ的是 E:sys_isoubuntu-5.04-install-amd64.iso。
- 填写虚拟机名字,及安装路径。upZ的是 Ubuntu 5.04 及 D:Program Files (x86)Virtual
Machinesubuntu 5.04
- 默认下一步
- 毕竟是老版系统,内存upZ选择2G,觉对够用。
设置不当易出BUG
- 网络需要选择桥接,NAT模式该系统不支持,会导致后面安装连不上网。
- 默认下两步
硬盘根据情况,upZ选择20G够用了。
- 默认下两步
设置不当易出BUG
- 到这里需要 自定义硬件,否则安装时会挂载不上CDROM
设置不当易出BUG
- 选择 新CD/DVD–>高级
设置不当易出BUG
- 选择IDE方式。
- 点击完成,开始进入按照界面。
- 进入安装界面,由于默认安装会出现X11 server启动问题,因此这里选择server安装(server就是服务器版本,无可视化界面。),在命令行输入server,敲击回车。
- language可以随便选择,UPZ选择English。
- 如果选择中文,location这里会有中国选项,UPZ这里选择的是English,因此需要找到CHINA,当前界面没有,因此选择Other
- 找到CHINA
- 一路回车
- 填写用户名
- 填写密码
- 回车,重启
- 登陆用户
- 安装成功
- 安装的镜像是Live版,需要安装install版。详见 “下载ubuntu5.04安装镜像->选择镜像”小节。
默认的SATA设备节点方式ubuntu5.04不支持,关闭客户机系统,修改虚拟设备节点为IDE(SCSI应该也可以,UPZ没有尝试,需要选一下节点,避免和硬盘挂载节点冲突。),后重启。详见 “安装ubuntu5.04-> Step 1-新建虚拟机->选择IDE方式。”部分。
1.4.3 BUG 3: 安装完成后,出现 X server相关问题 安装的是default版,有界面,界面使用的是X server,由于这个问题UPZ查了好久没解决,因此选择安装server版,无界面,若有朋友知道如何正面解,还请不吝赐教。
安装选择server版,便无此问题。详见 “安装ubuntu5.04-> Step 2-进入ubuntu安装界面” 小节。
- 关闭客户机系统,设置虚拟机设置选项->网络适配器->网络连接,选择桥接模式or自定义:
设置后重启,详见 “安装ubuntu5.04-> Step 1-新建虚拟机->网络需要选择桥接,NAT模式该系统不支持,会导致后面安装连不上网。”部分。
第二章
到第一章结束,简单的ubuntu5.04环境就搭建完成了,但是了解linux kernel编程的人都知道,linux device driver modules的编译分为两种,第一种为内部编译,第二种是外部编译,不管是哪种方式,都需要有linux kernle 的源码,而当前搭建的环境中并没有,如下图可以看到在/lib/modules/2.6.10-5-amd64-generic/目录下并没有build目录,因此需要安装linux-headers等,需进行以下步骤的配置安装。
2.1 更新软件源 2.1.1 Step 1-修改root用户密码
- 为了待会操作的方便,UPZ想切换到root用户,避免反复的敲sudo。但会发现切换用户发现,管理员用户不可用。
- 因为安装时并没有指定root用的密码信息,因此这里修改一下密码就可以了。
- 可以看到当前是可以联网的,关于网络配置在第一章中介绍过。
- 但在使用apt-get update时会出现以下情况
- 在apt-get upgrade时也会出现一样情况
- 在使用apt-get安装软件时也会出现类似的情况:Please insert the disc labeled “xxx” in the
drive ‘/cdrom/’ and press enter 的情况。
- 该原因是/etc/apt/source.list文件中配置获取软件package的方式是选择CDROM的方式,也就是光盘的方式。
- 可以看到是通过cdrom的方式
- 在改行最前面加入#,把它注释掉。
- 修改后直接再apt-get install 软件名会发现,找不到package,因为没有软件源了。
- 因此需要在网上找软件源的地址,然后添加到source.list中。
在此需要补充一个很重要的知识,从而避免踩坑(UPZ在此步骤踩了很多坑)。
- 详见:https://blog.csdn.net/u012843189/article/details/80964287
- 由于连接中这位大神讲解的很详细,因此下文只做简单的介绍:
- 可以看到系统自带的source.list文件中,一共三组,每组有两行,分别以deb、deb-src开头。每行分四个部分,如下图。
- 而这四部分分别是: deb、url、codename、components,
- 其格式为:
# simple format deb url codename components deb-src url codename components # full format deb url codename components deb-src url codename components deb url codename-security components deb-src url codename-security components deb url codename-updates components deb-src url codename-updates components deb url codename-proposed components deb-src url codename-proposed components deb url codename-backports components deb-src url codename-backports components
- 该四部分含义分别为:
- deb & deb-src
1). deb:二进制包仓库
2). deb-src:二进制包的源码库
- url:库所在的地址,可以是网络地址,也可以是本地的镜像地址
- codename: Ubuntu版本的代号。可以用命令lsb_release -sc来查看当前系统的代号。
- components: 软件的性质(free或non-free等)
- 其中第三部分,在每组中都不同,其“codename-”后面跟的名字含义如下:
- security - Important Security Updates.
- updates - Recommended Updates.
- proposed - Pre-released Updates.
- backports - Unsupported Updates.
- "codename"及"codename-xxx"这些目录文件在 url/dists/中都可以查看到。
- 例如:url = http://cn.archive.ubuntu.com/ubuntu
注意:url != http://cn.archive.ubuntu.com/ubuntu/dists
填写source.list文件时不要写 url + /dists/,它会自动找的。
- 其中第四部分,在每组中都不同,”components“包含如下:
- main: 完全的自由软件。
- restricted: 不完全的自由软件。
- universe: Ubuntu官方不提供支持与补丁,全靠社区支持。
- multiverse:非自由软件,完全不提供支持和补丁
- 一般每行都填写这四个关键词,使用空格隔开(多写无害,系统会自动筛选可用项)。
- 如果你还记得第一章安装ubuntu5.04时提到的ubuntu的版本名字的话。那么你应该熟悉__Hoary__,没错它就是ubuntu5.04的版本名字,也就是__codename__。我们看到在中国ubuntu源中并没有hoary对应的源,因此这个源不能用。
若不信的话你可以尝试下,会报以下错误:
- 取消注释:
- 敲apt-get update 回车后报错:
- 敲apt-get update > t.log 回车后查看t.log文件,查具体错误原因,会发现404:
-
一般两种情况造成的:
- 第一:是无法解析 http://cn.archive.ubuntu.com/ubuntu 这个网址。
- 第二:是这个网站中确实没有你想要的版本名。
但如果能ping的话,就证明不是第一种情况,实践发现确实不能ping通:
-
UPZ修改了下hosts文件,修改过程不做介绍,该修改方法后面会介绍,结果如下:
可以ping通:
-
再次apt-get update 依旧报同样错,因此可以证明网站中没有hoary版本。
-
这时需要找有hoary的仓了,由于ubuntu5.04版本有些老旧,所以普通的软件源网站都没有,清华源和阿里源UPZ也查过没有。经百般搜索UPZ找到了一个专门维护老版本系统软件源网站:
-
http://old-releases.ubuntu.com/ubuntu/
- 点击进入dists,发现有hoary:
我们按照“source.list文件修改规则”小节中介绍的规则对/etc/apt/source.list文件进行修改,如下(由于ubuntu我们安装的是server版,因此没有图像化界面,只能一个字符一个字符的敲,因此需要仔细一些,避免敲错,敲错会报上小节讲到的__404错误__):
#将原文件中所有的行都注释掉(在行最前面加#) #将以下信息写入文件中 #deb-src 是下载源码的,可以不使用,网速慢,或者不稳定的话,容易报各种错误(302、404、etc....) deb http://old-releases.ubuntu.com/ubuntu/ hoary main multiverse restricted universe # deb-src http://old-releases.ubuntu.com/ubuntu/ hoary main multiverse restricted universe deb http://old-releases.ubuntu.com/ubuntu/ hoary-security main multiverse restricted universe # deb-src http://old-releases.ubuntu.com/ubuntu/ hoary-security main multiverse restricted universe deb http://old-releases.ubuntu.com/ubuntu/ hoary-updates main multiverse restricted universe # deb-src http://old-releases.ubuntu.com/ubuntu/ hoary-updates main multiverse restricted universe deb http://old-releases.ubuntu.com/ubuntu/ hoary-proposed main multiverse restricted universe # deb-src http://old-releases.ubuntu.com/ubuntu/ hoary-proposed main multiverse restricted universe deb http://old-releases.ubuntu.com/ubuntu/ hoary-backports main multiverse restricted universe # deb-src http://old-releases.ubuntu.com/ubuntu/ hoary-backports main multiverse restricted universe2.1.2.4 修改hosts
修改完毕后执行 apt-get update,如果之前虚拟机访问过该源网站,应该会直接执行,如果没有,有可能报404错误,原因是无法解析域名(在这里并不是网址,因为它不带/ubuntu/,注意区别)。因此就需要修改/etc/hosts。
- 无法解析域名,就是系统不能根据地址分析出域名的实际ip地址,这时候需要在hosts文件中告诉它,格式为:
ip domain_name
- 域名我们知道了是: http://old-releases.ubuntu.com/ubuntu/
ip我们通过查询工具获取,链接地址: https://site.ip138.com/
输入域名,点击查询
- 解析到的结果如下,可以随便选一个
- 按照hosts格式,在文件最后添加:
185.125.190.40 http://old-releases.ubuntu.com
- 执行apt-get update
- 执行apt-get upgrade
- 查看系统内核当前的版本号:
- 使用apt-get install linux-headers-$(uname -r) 命令安装 linux-headers:
- 此时在/lib/modules/2.6.10-5-am64-generic 目录下就会有build的软连接:
- 进入build之后敲ls -l,会发现,他们都是指向linux-headers-2.6.10-5的软连接:
- 在/usr/src目录下会有linux-headers-2.6.10-5的文件夹:
- 进入该目录,就会发现熟悉的linux-2.6.10的源码了:
- 使用apt-get install gcc -y 命令安装 gcc:
- 使用apt-get install make 命令安装 make:
- 环境已经搭建完成,现在测试一下好不好使,首先编写一个简单的k_test.c驱动程序:
- 然后编写一个简单的Makefile:
- 敲make后,编译成功:
- 敲insmod k_test.ko:
- dmesg 可以看到,我们在程序中打印的“This is k_test_init“:
- 敲rmmod k_test.ko:
- dmesg 可以看到,我们在程序中打印的“This is k_test_exit“:
正常编写代码时,一般通过source insight等软件,当然也有很多大神习惯使用vim,但与主机共享文件还是很有必要的。UPZ习惯使用主机编写软件,通过共享文件将文件传到虚拟机进行编译,现在有ubuntu5.04系统,编译完成后就可以直接安装测试了。
2.3.1 挂载vmwaretools的相关镜像到CDROM- 和正常安装vmwaretools的流程不太相同,正常的为以下操作:
- 如果选择这样操作,会默认安装最新版本的vmwaretools,而安装时会依赖一些库,由于系统版本太老,导致库太老了,因此会提示系统的glibc的版本太老了,安装时会报以下错误:
- 因此需要安装兼容老系统的vmwaretools版本,首先确认下cdrom节点没有被挂载,以免待会挂载镜像时失败,如果有被挂载的话,就使用umount xxx
卸载掉,或者直接重启电脑(如果遇到节点busy的话,对于新手来说强制卸载比较麻烦,不如直接重启),UPZ这里没有挂载cdrom节点:
- 在列表中右击虚拟机系统->设置:
- 选择CD/DVD(IDE):
- 点击浏览:
- 找到VMware安装的位置:
- 找到linuxPreGlibc25.iso,点击打开,此为兼容老系统的vmwaretools版本镜像:
- 拷贝及解压文件等操作,执行以下操作:
#以下执行环境为root用户,请切换到root用户
#挂载cdrom 到 /mnt
mount /dev/cdrom /mnt
#在/root 下创建 vm 文件夹
cd
mkdir vm
#拷贝/mnt下所有文件到 当前vm中
cp /mnt
$initmodfile = '/etc/sysconfig/kernel';
if ($gSystem{'distribution'} eq 'suse') {
$syscmd = join(' ', $binary, $kernelList, $initrdList);
} else {
$syscmd = $binary;
}
$initmodfile = '/etc/sysconfig/kernel';
if ($gSystem{'distribution'} eq 'suse') {
$syscmd = join(' ', $binary, $kernelList, $initrdList);
} else {
$syscmd = join(' ', $binary, '-o', "/boot/initrd-$kernRel.img", $kernRel);
}
- 修改后如下:
- 再次进入vmware-tools-distrib目录下执行./vmware-install.pl,一路回车,安装成功:
- 此时,进入/mnt 目录下,发现生成了文件夹/hgfs,但里面并没有东西:
- 这是因为此时只安装好了vmware-tools,还没有配置共享,配置如下,在列表中右击虚拟机系统->设置:
- 点击 选项->共享文件夹->总是启动:
- 点击 添加:
- 填写主机路径(主机共享的文件夹)UPZ共享了桌面的tmp文件:
- 一路确认完成,重启虚拟机:
- 再次进入/mnt/hgtfs/文件下,发现有tmp文件,进入,可以查看到主机共享的文件:
因为ubuntu5.04虚拟机命令行界面看起来太不友好,因此UPZ决定通过主机mobaxterm来访问ubuntu5.04虚拟机,该步骤不太复杂,具体如下
- 使用sudo apt-get install openssh-server -y安装openssh-server:
- 使用ifconfig查看虚拟机ip:
- 可以看到ip为192.168.1.4:
- 在mobaxterm中新建一个terminal,使用ssh连接虚拟机:



