第三周(9.21-9.27):
学习计时:共xxx小时 读书: 代码: 作业: 博客: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
一、学习目标 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1. 熟悉Linux系统下的开发环境 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
二、学习资源 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1. 教材:第一章,第七章 2. 《嵌入式Linux应用程序开发标准教程》第三章3.1-3.5 3. 课程资料:https://www.shiyanlou.com/courses/413 实验二,课程邀请码:W7FQKW4Y 4. Vim编辑器:https://www.shiyanlou.com/courses/2 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
三、学习方法 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1. 进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。 2. 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/ 3. 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习 4. 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题“信息安全系统设计基础第二周学习总结”
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
四、学习任务 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(提示:请将要求学生完成的任务、测验或思考题列在此处) 1.教材第一章,第七章学习:阅读并消化教材内容(有部分考试内容) 2.《嵌入式Linux应用程序开发标准教程》第三章3.1-3.5的学习(本周大部分考试内容都从这出,特别是与教材重复内容) 3.完成实验并发Blog
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
五、后续学习预告(可选): |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
教材第二章《信息的表示和处理》 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
六、学习过程 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(提示:此处由学生填写,学习过程,学习笔记,代码编译,运行结果,思考等)
1. 重要知识点总结梳理: 实验楼中vim相关命令总结 进入vim 1.使用vim命令进入vim界面 vim后面加上你要打开的已存在的文件名或者不存在(则作为新建文件)的文件名。 直接使用vim也可以打开vim编辑器,但是不会打开任何文件。 进入命令行模式后输入:e 文件路径 同样可以打开相应文件。 2.游标移动 在进入vim后,按下i键进入插入模式。 按Esc进入普通模式,在该模式下使用方向键或者h,j,k,l键可以移动游标。
进入插入模式 1.进入插入模式 在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入
注意每次要先回到普通模式才能切换成以不同的方式进入插入模式 保存文档 1.命令行模式下保存文档 从普通模式输入:进入命令行模式,输入w回车,保存文档。输入:w 文件名可以将文档另存为其他文件名或存到其它路径下 退出vim 1.命令行模式下退出vim 从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑。
2.普通模式下退出vim 普通模式下输入Shift+zz即可保存退出vim 删除文本 1.普通模式下删除vim文本信息 进入普通模式:
除此之外,你还可以在命令之前加上数字,表示一次删除多行,如: 2dd表示一次删除2行 vim重复命令 1.重复执行上次命令 在普通模式下.(小数点)表示重复上一次的命令操作 普通模式下输入x,删除第一个字符,输入.(小数点)会再次删除一个字符,除此之外也可以重复dd的删除操作 2.执行指定次数相同的命令 进入普通模式输入N<command>,N表示重复后面的次数, 在普通模式下,可以使用dw或者daw(delete a word)删除一个单词,到dnw表示删除n个单词 游标的快速跳转 1.行间跳转
使用Ctrl+o快速回到上一次(跳转前)光标所在位置 2.行内跳转 普通模式下使用下列命令在行内按照单词为单位进行跳转
复制粘贴和剪切 1.复制及粘贴文本 普通模式中使用y复制 普通模式中,yy复制游标所在的整行(3yy表示复制3行) 普通模式中,y^ 复制至行首,或y0。不含光标所在处字符。 普通模式中,y$ 复制至行尾。含光所在处字符。 普通模式中,yw 复制一个单词。 普通模式中,y2w 复制两个单词。 普通模式中,yG 复制至文本末。 普通模式中,y1G 复制至文本开头。 普通模式中使用p粘贴 普通模式中,p(小写)代表粘贴至光标后(下) 普通模式中,P(大写)代表粘贴至光标前(上) 2.剪切及粘贴 使用p来粘贴 交换上下行:ddp 字符的替换及撤销(Undo操作) 1.替换和撤销(Undo)命令 替换和Undo命令都是针对普通模式下的操作
快速缩进 1.使用命令进行快速调整缩进操作 普通模式下输入>> 整行将向右缩进(使用,用于格式化代码超爽) 普通模式下输入<< 整行向左回退 普通模式下输入:进入命令行模式下对shiftwidth值进行设置可以控制缩进和回退的字符数 2.shiftwidth命令 设置可以控制缩进和回退的字符数 获取目前的设定值: :set shiftwidth 设置缩进为10个字符: :set shiftwidth=10 3.调整文本位置 命令行模式下输入:ce(center)命令使本行内容居中 命令行模式下输入:ri(right)命令使本行文本靠右 命令行模式下输入:le(left)命令使本行内容靠左 查找 1.快速查找 普通模式下输入/然后键入需要查找的字符串 按回车后就会进行查找。 ?与/功能相同,只不过?是向上而/是向下查找。 进入查找之后,输入n和N可以继续查找n表示继续查找,N反向查找 2.高级查找 普通模式下输入\*寻找游标所在处的单词 普通模式下输入\#同上,但 \* 是向前(上)找,#则是向后(下)找 普通模式下输入g\*同\* ,但部分符合该单词即可 普通模式下输入g\#同\# ,但部分符合该单词即可 以上查找n,N 的继续查找命令依然可以用 多文件编辑 1.使用vim编辑多个文件 编辑多个文件有两种形式,一种是在进入vim前使用的参数就是多个文件。另一种就是进入vim后再编辑其他的文件。 同时创建两个新文件并编辑 $ vim 1.txt 2.txt 默认进入1.txt文件的编辑界面 命令行模式下输入:n编辑2.txt文件,可以加!即:n!强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件 命令行模式下输入:N编辑1.txt文件,可以加!即:N!强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件 2.进入vim后打开新文件 命令行模式下输入:e 3.txt 打开新文件3.txt 命令行模式下输入:e# 回到前一个文件 命令行模式下输入:ls可以列出以前编辑过的文档 命令行模式下输入:b 2.txt(或者编号)可以直接进入文件2.txt编辑 命令行模式下输入:bd 2.txt(或者编号)可以删除以前编辑过的列表中的文件项目 命令行模式下输入:e! 4.txt,新打开文件4.txt,放弃正在编辑的文件 命令行模式下输入:f 显示正在编辑的文件名 命令行模式下输入:f new.txt,改变正在编辑的文件名字为new.txt 3.恢复文件 如果因为断电等原因造成文档没有保存,可以采用恢复方式,vim -r进入文档后,输入:ewcover 1.txt来恢复 $ vim -r 1.txt 可视模式 1.可视模式命令简介 在普通模式下输入v(小写),进入字符选择模式,就可以移动光标,光标走过的地方就会选取。再次按下v会后就会取消选取。 在普通模式下输入Shift+v(小写),进入行选择模式,按下V之后就会把整行选取,您可以上下移动光标选更多的行,同样,再按一次Shift+v就可以取消选取。 在普通模式下输入 Ctrl+v(小写),这是区域选择模式,可以进行矩形区域选择,再按一次Ctrl+v取消选取。 在普通模式下输入d删除选取区域内容 在普通模式下输入y复制选取区域内容 2.可视模式命令练习 Shift+v(小写V),进入可视模式进行行选择 在普通模式下输入 Ctrl+v(小写v),进入可视模式进行矩形区域选择 视窗操作 1.视窗操作简介 命令行模式下输入:sp 1.txt 打开新的横向视窗来编辑1.txt 命令行模式下输入:vsp 2.txt 打开新的纵向视窗来编辑1.txt 普通模式下Ctrl-w s 将当前窗口分割成两个水平的窗口 普通模式下Ctrl-w v 将当前窗口分割成两个垂直的窗口 普通模式下Ctrl-w q 即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符!即:q! 普通模式下Ctrl-w o 打开一个视窗并且隐藏之前的所有视窗 普通模式下Ctrl-w j 移至下面视窗 普通模式下Ctrl-w k 移至上面视窗 普通模式下Ctrl-w h 移至左边视窗 普通模式下Ctrl-w l 移至右边视窗 普通模式下Ctrl-w J 将当前视窗移至下面 普通模式下Ctrl-w K 将当前视窗移至上面 普通模式下Ctrl-w H 将当前视窗移至左边 普通模式下Ctrl-w L 将当前视窗移至右边 普通模式下Ctrl-w - 减小视窗的高度 普通模式下Ctrl-w + 增加视窗的高度 文档加密 1.创建加密文档 Vim –x file1 在vim执行外部命令 在命令行模式中输入!可以执行外部的shell命令 :!ls 用于显示当前目录的内容 :!rm FILENAME用于删除名为 FILENAME 的文件 :w FILENAME可将当前 VIM 中正在编辑的文件另存为 FILENAME 文件 帮助系统 1.vim中的查看帮助 普通模式下按F1打开vim自己预设的帮助文档 命令行模式下输入:h shiftwidth 打开名为shiftwidth的帮助文件 命令行模式下输入:ver 显示版本及参数 功能设定 1.vim的功能设定 可以在编辑文件的时候进行功能设定,要永久保存配置需要修改vim配置文件。 vim的配置文件~/.vimrc 2.获取目前的设定 命令行模式下输入:set或者:se显示所有修改过的配置 命令行模式下输入:set all 显示所有的设定值 命令行模式下输入:set option? 显示option的设定值 命令行模式下输入:set nooption 取消当期设定值 3.set功能的说明 命令行模式下输入:set autoindent(ai) 设置自动缩进 命令行模式下输入:set autowrite(aw) 设置自动存档,默认未打开 命令行模式下输入:set background=dark或light,设置背景风格 命令行模式下输入:set backup(bk) 设置自动备份,默认未打开 命令行模式下输入: set cindent(cin) 设置C语言风格缩进
书本内容总结 嵌入式Linux: 第三章 Linux下c编程基础: 3.1 Linux下c语言编程概述 C语言特点:中级语言,结构化,功能齐全 所用工具: *编辑器:完成对所录入文字的编辑功能。Vim和emacs。 *编译连接器:源代码转化为可执行代码。Gcc编译器。 *调试器:gdb *项目管理器:控制编译或者重复编译软件的工具。 3.2常用编辑器 行编辑器(Ed,Ex):每次只能对一行进行操作。 和全屏幕编辑器(vi,emacs):对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上。 Vi:(因为通过实验已经做出了全面的总结,所以这里不加赘述) 命令行模式:一般模式 上下移动光标 删除、复制、粘贴 插入模式:文字编辑 【esc】退回命令行模式 底行模式:光标位于屏幕底行,文件保存退出 ,设置编辑环境(寻找字符串、列出行号) 流程:进入vi(在命令行下键入“vi hello”文件名),命令行模式,光标在屏幕上方->在命令行模式下键入i进入插入模式(在屏幕底部显示有“插入”表示插入模式中的输入状态,可以输入文字)->在插入模式下esc,变为命令行模式,在底行行中输入“:wq”存盘退出进入底行模式。 emacs: 功能:编辑、编译、调试。只有一种编辑模式。 启动:emacs【文件名】 相关功能键(p58) 编译调试功能:为gdb调试器提供了一个功能齐全的接口。 3.3 gcc编译器 全称GNU CC ,符合ANSI C标准,可编译语言:c,c++,object c,java,Fortran,Pascal,Modula-3,Ada. GCC的编译流程: 预处理:对包含的头文件(#include)和宏定义(#define、#ifdef)等进行处理。编译器将包含的头文件stdio.h编译进来,并且用户可以使用gcc的选项-E进行查看。例:gcc –E hello.c –o hello.i.选项-o 是指目标文件,“.i”文件为已经过预处理的C程序。 编译:将代码翻译成汇编语言。例:gcc -S hello.i –o hello.s 汇编:将编译阶段生成的.s文件转成目标文件。例:gcc –c hello.s –o hello.o 链接:函数库。静态库.a,动态库(默认.so) gcc编译选项分析中体现了静态库、动态库的创建和使用,由于字数过多,在这里不一一打出,只体现一些关键的选项: 静态库: 创建静态库:gcc -c unsgn_pow.c //unsgn_pow为函数名 ar rcsv libpow.a unsgn_pow.o a - unsgn_pow.o 编译主程序:gcc -o pow_test pow_test.c -L. -lpow。 动态库: 为动态库构造目标文件:gcc -fpic -Wall -C unsgn_pow.c 生成动态可:gcc -shared -o libpow.so unsgn_pow.o 链接到刚生成的动态库:gcc -o pow_test pow_test.c -L. -lpow 3.4GDB调试器: Vim编写,gcc编译:gcc –g test.c –o test, gdb调试:gdb test 查看文件:l 设置断点:在b后加入相对应的行号。例b 6 查看断点情况:设置完断电后键入info b,在gdb中可以设置多个断点。bt 查询调用函数的情况。 运行代码:默认从首行开始运行代码,键入r 查看变量值:p 变量。例:p n 单步运行:n或s。若有函数调用的时候,s会进入函数但是n不会进入函数。 恢复程序运行:c gdb基本命令:(p71) help 工作环境相关命令 设置断点与恢复命令 源码查看相关命令 查看运行数据相关命令 修改运行参数相关命令 3.5 make工程管理器 功能:自动编译管理器 makefile的基本结构(make读入的唯一配置文件): 格式:target:dependency_files command 再make target makefile变量:(p78) makefile规则:包括了目标体、依赖文件及其之间的命令语句 隐含规则 模式规则 深入理解计算机系统(感觉内容太多了,而且不容易看懂,只能结合另一本书看): 静态链接:以一组可重定位目标文件和命令行参数作为输入,生成一个完全链接的可以加载和运行的可执行目标文件作为输出。输入的可重定位文件由各种不同的代码和数据节组成。 两个主要任务:符号解析和重定位 与静态库链接: 静态库:将所有相关的目标模块打包成为一个单独的文件。可以用作链接器的输入。当链接器构造一个输出的可执行文件时,只拷贝静态库中被应用程序引用的目标模块。更多的我认为还是另一本书比较详细,这本书提供的理论知识太多,命令代码没有另一本一目了然。 2. 教材代码编译运行
gcc能够顺利编译,并掌握了方法。 gdb:gcc -g add.c -o add,gdb add这是我所运用的命令,但是之后界面上显示add:找不到那个文件或目录。经过了许多次尝试并且在网上搜寻了方法后依旧没有解决。 在实现静态库、动态库和makefile时遇到了不少难题。
静态库: 动态库: makefile:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
七、遇到的问题及解决 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1. 由于与浏览器快捷键冲突,无法在实验楼中进行vim视窗操作的练习。 2.不能注册动态库的路径名。一共出现两种问题,在老师所提供的深入理解计算机系统的实验楼中shiyanlou没有被加入用户组,所以没有cp的授权,没有办法执行文件。之后我将shiyanlou加入sudo后,也一直无法将libmath.so拷贝到环境变量所指定的路径当中。 3.gdb:gcc -g add.c -o add,gdb add这是我所运用的命令,但是之后界面上显示add:找不到那个文件或目录。经过了许多次尝试并且在网上搜寻了方法后依旧没有解决。 4.在链接静态库的时候一开始不知道怎么能够同时编译多个.c文件,我所用的方法是将每一个.c文件进行编译后在ar打包,这样速度效率都很低,后来联系到《深入理解计算机》这本书上的示例,发现可以同时编译多个.c文件后再一起进行打包。 5.makefile模仿书上代码编写后无法实现
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
八、其他 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
这个星期的实验量比较适中,能够每天进行一些学习。由于自己学的太过死板,有很多命令没有办法举一反三,在练习过程中遇到很多问题也最终没有能够解决,但是通过这一周的学习,我已经能够基本掌握要领,虽然暂时还不能脱离书本单独进行实验,也能够有所领悟。 |