2018-2019-1 20189218《Linux内核原理与分析》第四周作业
构造简单的Linux内核
显然用实验楼配好的环境做这个实验太简单了,按照没有困难制造困难也要上的原则,在自己的64位虚拟机上做这个实验。
按照课本(视频)上的步骤一直做下去,到编译生成init时出现了错误:
初步查询该错误得知是库目录不在gcc搜索目录下,粗看几个解决方法都很麻烦,甚至一些写解决方法的人恐怕都不知道他们自己在写什么,于是抱有侥幸心理,去掉了编译选项中的-m32
。编译通过:
但是在qemu运行时却出错了:
但其实编译生成的init
是可以正常执行的:
由于出错信息提示没有init被执行,所以我一开始怀疑是打包文件的问题,于是不执行rootfs.img而是直接执行roofts/init
,还是出错了,不能识别的block
,看来打包成镜像还是必不可少的:
于是转回最开始的问题,编译-m32
的init。可以看到我遇到的错误是
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
初步判断是缺少libgcc.so这个库,但是找了很多方法都没有找到如何安装这个库,而且执行locate libgcc
时出现过许多libgcc_s这种库,按照我的想法是再找不到方法就创建软链接链到某个库,所幸看到了之前遇到过类似问题的人的解决办法,感觉这个大兄弟把能装的东西都装了一遍:
我的gcc版本时4.8版本,修改上述命令中的版本后编译成功。(上述截图中的lib32bz2-dev没有找到,可能4.8版本的gcc已经取消这个库了)
重新配置Linux使其携带调试信息
调试过程十分顺利,如图所示:
感想
在解决找不到动态库的问题时,其实很早的阶段就看到有人推荐安装gcc的multilib,但是当时我只是单纯的执行了sudo apt-get install gcc-multilib
,并没有意识到要指定所需的版本,事后我查看发现,不指定版本默认安装最新版本。虽然最后解决问题时安装的一堆库,但我认为最后起作用的还是gcc-4.8-multilib(在安装g++-4.8-multilib后居然也装好了gcc-4.8-multilib)。可见gcc各种库对版本也有很强的依赖性,在实际操作中一定要注意统一版本避免不必要的麻烦。
2018-2019-1 20189218《Linux内核原理与分析》第四周作业的更多相关文章
- 2019-2020-1 20199303<Linux内核原理与分析>第二周作业
2019-2020-1 20199303第二周作业 1.汇编与寄存器的学习 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中 ...
- 20169219 linux内核原理与分析第二周作业
"linux内核分析"的第一讲主要讲了计算机的体系结构,和各寄存器之间对数据的处理过程. 通用寄存器 AX:累加器 BX:基地址寄存器 CX:计数寄存器 DX:数据寄存器 BP:堆 ...
- 2019-2020-1 20199314 <Linux内核原理与分析>第二周作业
1.基础学习内容 1.1 冯诺依曼体系结构 计算机由控制器.运算器.存储器.输入设备.输出设备五部分组成. 1.1.1 冯诺依曼计算机特点 (1)采用存储程序方式,指令和数据不加区别混合存储在同一个存 ...
- Linux内核原理与分析-第一周作业
本科期间,学校开设过linux相关的课程,当时的学习方式主要以课堂听授为主.虽然老师也提供了相关的学习教材跟参考材料,但是整体学下来感觉收获并不是太大,现在回想起来,主要还是由于自己课下没有及时动手实 ...
- 2019-2020-1 20199314 <Linux内核原理与分析>第一周作业
前言 本周对实验楼的Linux基础入门进行了学习,目前学习到实验九完成到挑战二. 学习和实验内容 快速学习了Linux系统的发展历程及其简介,学习了下的变量.用户权限管理.文件打包及压缩.常用命令的和 ...
- Linux内核原理与分析-第二周作业
写之前回看了一遍秒速五厘米:如果
- 20169219linux 内核原理与分析第四周作业
系统调用 系统调用是用户空间访问内核的唯一手段:除异常和陷入外,它们是内核唯一的合法入口. 一般情况下,应用程序通过在用户空间实现的应用编程接口(API)而不是直接通过系统调用来编程. 要访问系统调用 ...
- 2018-2019-1 20189221《Linux内核原理与分析》第一周作业
Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第十三周作业
<Linux内核原理与分析>第十三周作业 一.本周内容概述 通过重现缓冲区溢出攻击来理解漏洞 二.本周学习内容 1.实验简介 注意:实验中命令在 xfce 终端中输入,前面有 $ 的内容为 ...
- 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业
<Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...
随机推荐
- 为什么面试要问 hashmap 的原理
我们都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深.这题经常出现在高级或中高级面试中.投资银行更喜欢问这个问题 ...
- Python开发【笔记】:关于子线程(子进程)与主线程(主进程)的关联
前言: 主要分析下面的问题: 主线程启线程 主线程执行完毕,会关闭子线程吗? 子线程启线程 主线程执行完毕,会结束吗? 主进程启动进程,主进程执行完毕,会怎样? 子进程启动进程,进程执行完毕,又会 ...
- 01_Python 基础课程安排
Python 基础课程安排 目标 明确基础班课程内容 课程清单 序号 内容 目标 01 Linux 基础 让大家对 Ubuntu 的使用从很 陌生 达到 灵活操作 02 Python 基础 涵盖 Py ...
- mysql "order by" "distinct" "group by" "having"
本文用到的表结构 create table stu( stu_id int auto_increment primary key, name ) not null, age smallint, cls ...
- jmeter测试手机号码归属地
jmeter测试手机号码归属地接口时,HTTP请求有以下两种书写方法: 1.请求和参数一同写在路径中 2.参数单独写在参数列表中 请求方法既可以使用GET方法又可以使用POST方法. 注意:“服务器名 ...
- 第k小数据
给定两个整型数组A和B(未排序).我们将A和B中的元素两两相加可以得到数组C. 譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6]. 现在给你数组A和B, ...
- spring-data-mongodb关于id的坑
有如下Mongo记录: 在Java中对应2个类来表示此结构: public class SG_IMAGERELATION { @Id private String id; private int gi ...
- iOS9 & iOS10 & iOS11 HTTP 不能正常使用的解决办法
iOS9 & iOS10 & iOS11 HTTP 不能正常使用的解决办法 xcode ios 291.4k 次阅读 · 读完需要 8 分钟 54 今天升级Xcode 7.0 b ...
- js数组中indesOf方法的使用
<html> <head> <title>数组的操作</title> <script type="text/javascript&quo ...
- 134. Gas Station(数学定理依赖题)
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...