使用Vi编辑器编写Linux0.11程序并编译运行

本文详细介绍了Linux中vi编辑器的三种操作模式及其常用命令,包括如何进入和退出不同模式,以及文件的保存与退出。同时,解释了Makefile的作用,展示了如何编写Makefile来管理C程序的编译和链接过程。通过一个简单的加法程序,演示了C语言的源代码执行流程,并给出了加法函数和主函数的代码示例,以及对应的Makefile配置。此外,列举了一系列vi编辑器的常用操作,帮助读者更好地掌握文本编辑技巧。

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

一.vi编辑器的使用

Linux自带的一个文本编辑器。

vi编辑器有3种操作模式:命令模式插入模式末行模式

命令模式:当输入vi命令后,会首先进入命令模式,此时输入的任何字符都被视为命令。命令模式用于控制屏幕光标移动、文本字符/字/行删除、移动复制某区段,以及进入插入模式或进入末行模式。

插入模式:在命令模式输入相应的插入命令(例如i命令)进入该模式。只有在插入模式下,才可以进行文字数据输入及添加代码,按Esc键可回到命令模式。

末行模式:在命令模式下输入某些特殊字符,如“/”、“?”和“:”,才可进入末行模式。在该模式下可存储文件或退出编辑器,也可设置环境变量。

通常:

vi  文件名   //进入vi模式

 刚进入vi编辑器的界面,此时是命令模式

 点击a,i或Insert后,就可进入插入模式

下图是点击i键进入插入模式之后,输入的字符在光标之前

 当输入代码完毕后,要返回命令模式,点击Esc键,此时界面如下图:

光标跑到了字符下面

 再输入:,就会跑到下面

 再输入wq,点击回车,就会保存并退出

如下图便是返回到输入窗口了

 下次如需进入,再次用vi 文件名

文章末尾附有vi编辑器常用操作

二.makefile文件

Make工具可以用来管理一个项目中多个源代码文件的编译和链接过程,也可以用来管理多个模块间的依赖关系,甚至是软件的安装过程。

先介绍一个源代码文件的执行旅程:

(1)预处理阶段

预处理器根据以#开头的命令,读取头文件。

(2)编译阶段

将文本文件hello.i变成hello.s。(高级语言到汇编语言)

(3)汇编阶段

将文本文件hello.s翻译成机器语言指令,变成二进制文件hello.o。(汇编语言到机器语言)

(4)链接阶段

与某些库链接,得到可执行文件,hello.o变成了hello,可以放到内存中执行。

 我们可以利用makefile文件来实现文件的编译与链接过程,依然在vi编辑器里写。

链接:
hello:hello.o                  //依赖关系,把二进制文件hello.o跟一些库一起链接成可执行文件(例如 
                                       windows就是exe文件)
	
    gcc hello.o -o hello       //利用gcc编译器的可执行文件gcc把二进制文件hello.o链接成可执行文 
                                   件hello
编译:
hello.o:hello.c                 //把源代码文件hello.c编译成二进制文件hello.o(中间省略了i,s的过 
                                   程)
	gcc -c hello.c -o hello.o   //利用gcc编译器的可执行文件gcc把源代码文件hello.c编译成二进制 
                                   文件hello.o


也可以缩短为一步完成:
hello: hello.c
		gcc hello.c -o hello


//!!!注意!!!:空格处一定要用Tab键

 写完之后,保存并退出文件(同上方vi编辑器操作)

三.编写一个加法程序

利用C语言

思路:在主函数中调用自定义的加法函数(相当于一个库),所以我们要分别编译加法函数文件(add.c),主函数文件(main.c),并把两个文件链接成可执行文件,执行并输出结果

add.c文件:

 

 main.c文件

 makefile文件

 编译运行:

 vi编辑器常用命令:

命令类型

命令形式

说明

进入vi命令

vi 文件名

显示vi编辑窗口,载入指定的文件,并进入命令模式

退出vi命令(退出vi时,若在插入模式,先按Esc返回命令模式)

:q!

放弃编辑内容,退出vi

:wq 或 :zz

保存文件,退出vi

:w

保存文件,但不退出vi

:q

退出vi,若文件被修改过,要确认是否放弃修改的内容

进入末行模式(命令模式下,输入特殊字符进入末行模式)

:

进入末行命令模式

进入插入模式(命令模式下,执行下列命令均可进入插入模式)

i

插入命令

a

附加命令

o

打开命令

s

替换命令

c

修改命令

r

取代命令

命令模式常用命令

命令

说明

x

删除光标所在的字符

X

删除光标所在位置前面的一个字符

nx

删除从光标开始到光标后n-1个字符

dw

删除光标到下一个单词起始位置

ndw

删除光标起的n个字

dd

删除光标所在的行

ndd

删除包括光标所在行的n行

Y

复制当前行至编辑缓冲区

nY

复制当前行开始的n行至编辑缓冲区

p

将编辑缓冲区的内容粘贴到光标的后面

参考文献:

一个程序的执行过程_CUMT德一的博客-CSDN博客_软件执行过程

《Linux内核实验教程》4.3

带中文注释可成功编译运行Linux0.11+Bochs2.62实验环境说明 此注释以网上获得的“linux带中文注释的0.11版本”为基础,对照赵炯博士《Linux内核完全注释(0.11) 》V3.0版(http://oldlinux.org/download/clk011c-3.0.pdf)编辑而成。作为对赵博士感谢,以及对Linux初学者的回馈,特发布在CSDN上。 此注释可以在http://oldlinux.org/Linux.old/bochs/提供的Linux-0.11-devel-XXXXXX实验环境下正确编译成功,使用:"make disk"命令重启Bochs虚拟机后,新编译源码直接生效,便于学习者直接阅读源码,直接进行实验。 注意事项: 1、为了使注释版与实验环境上的Linux0.11内核保持一致,达到对应文件可以互换的目的,与Linux0.11原始版本相比,加入了15个系统调用函数(参见include/Linux/sys.h第78-92行。赵博士原书没有这部分注释,我不敢班门弄斧),其它相关的文件加入了相应的定义。新加入的代码只有函数体定义,没有具体实现,对其它原始代码没有改变、没有影响。 2、键盘定义改成了美式键盘(原始代码中是芬兰键盘,会导致个别键出问题,调试的时候我曾被迷糊了好久,以为自己把程序搞乱了)。 3、把网上VC版的注释统一改成了 “/* */” 格式的注释。经测试,在Linux0.11实验环境中(gcc1.40),只有标准C注释语法可以正常编译。 4、由于《Linux内核完全注释(0.11) 》原书版本更新的原因,注释中提到的图、表可能与V3.0版书中不一致。 5、由于代码中加入注释,代码行号发生变化,注释中提到的代码行号会出现不一致,建议对照3.0版查询对应内容。 6、实验方法:请先安装附带的Bochs2.62版安装包,双击Test.bxrc即可启动实验系统,执行命令:sh t,即可完成对linuxcn的编译。 7、linux目录中是此实验系统中/usr/src/linux提取出来的不含中文注释的linux0.11源码(此版本比原始的0.11版多15个系统调用函数),linuxcn是加入了中文注释的源码。 8、diskb.img是实验系统与Windows环境下进行文件交换的1.44M软盘映像,执行脚本命令"sh t"时会自动从此映像中读取linux.tar、linuxcn.tar包,解包编译编译结果在:/usr/root/zw/linuxcn目录下。为了方便文件交换,建议使用7zip为压缩/解压缩工具(7zip可以直接生成tar包),用WinImage实现Windows环境与软件映像交换文件。 9、实验系统下 .profile中加入了几个命令,请读者注意。 10、若实验环境的启动盘被破坏,请用压缩包中的bootimage-0.11-hd覆盖对应文件即可。 11、若实验环境的要命文件系统被破坏,请用压缩包中的hdc-0.11-new.img覆盖对应文件即可。 2014-5-4 cyfx2288
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_坐看云起时_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值