学习笔记

1.ELF目标文件格式
编译器生成目标文件,目标文件与目标平台二进制兼容。
ELF:可执行或可链接的格式,是目标文件格式标准。
ELF类型:
可重定位文件:编译器汇编器创建的 .o 文件,最后所有的 .o文件链接为同一个linux内核。
可执行文件:多个可重定位文件结合成可执行文件,除了运行时解析的共享库,其他重定位工作全部完成。
共享目标文件:共享库,被其他可执行文件调用。
如何看待ELF文件:
可执行文件:程序头表描述的段的集合,段包含节。
可重定位文件:节头表描述的节的集合
ELF结构:
ELF header:在文件的开始,保存了路线图,描述了该文件的组织情况。
Program header table:告诉系统如何创建进程映像。用来构造进程映像的目标文件必须具有程序头部表,可重定位文件不需要这个表。
Section header table:包含了描述文件节区的信息,每个节区在表中都有一项,每一项给出诸如节区名称、节区大小这类信息。用于链接的目标文件必须包含节区头部表,其他目标文件可以有,也可以没有这个表。
programheader:和创建进程相关,描述连续几个节在文件中的位置、大小以及它被放进内存后的位置大小,告诉系统如何创建进程映像,可重定位文件不需要这个表。

汇编
节区
.text
存放程序源代码编译后的机器指令
.data
存放全局变量和局部静态变量
.bss
为未初始化的全局变量和局部静态变量预留位置,目标文件中,未初始化变量不需要占据任何实际的磁盘空间
.rel.text
存放调用外部函数或者引用全局变量等相关的重定位信息
.rel.data
一个全局变量被初始化为其他文件中的全局变量地址或者外部定义函数的地址。
.symtab
存放函数和全局变量的信息,重定位时根据.rel.text和.rel.data来修正相关地址
.debug
-g选项之后才有, 调试符号表
.line
-g选项之后才有,记录源代码行号和.text中机器指令的映射关系
.strtab
以null结尾的字符串序列
ELF头(elf header)------readelf -h filename
包含系统相关、类型相关、加载相关、链接相关的信息
节头部表(section header table)------readelf -S filename
描述程序节,为汇编器和链接器服务。它把elf文件分成了许多

问题

1、 模块机制怎样弥补可扩展性和可维护性相对较差这一缺陷?
很多驱动程序都以模块的形式存在,用户可以有选择的加载需要的驱动程序。
2、gcc -x是什么?
gcc -x: -x只激活预处理,编译,和汇编,,只把程式做成obj文档;
gcc -c:文件.o是二进制汇编文件打开是乱码
3、#include <linux/init.h>//包含_init、_exit,kernel.h包含常用的内核函数
4、#include <linux/module.h>//驱动程序的头文件
MODULE_LICENSE("Dual BSD/GPL");
static char *name="ycx";
static int __init name_init(void)
{
printk("==Hello World==\n");
printk("==Hello %s==\n",name);
return 0;
}
static void __exit name_exit(void)
{
printk(KERN_INFO"Name module exit\n");
}
module_init(name_init);
module_exit(name_exit);
module_param(name,charp,S_IRUGO);

2018-2019-1 20189208《Linux内核原理与分析》第八周作业的更多相关文章

  1. 2019-2020-1 20199329《Linux内核原理与分析》第九周作业

    <Linux内核原理与分析>第九周作业 一.本周内容概述: 阐释linux操作系统的整体构架 理解linux系统的一般执行过程和进程调度的时机 理解linux系统的中断和进程上下文切换 二 ...

  2. 2019-2020-1 20199329《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 一.上周问题总结: 未能及时整理笔记 Linux还需要多用 markdown格式不熟练 发布博客时间超过规定期限 二.本周学习内容: <庖丁解 ...

  3. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  4. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

  5. 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...

  6. 2017-2018-1 20179215《Linux内核原理与分析》第二周作业

    20179215<Linux内核原理与分析>第二周作业 这一周主要了解了计算机是如何工作的,包括现在存储程序计算机的工作模型.X86汇编指令包括几种内存地址的寻址方式和push.pop.c ...

  7. 2019-2020-1 20209313《Linux内核原理与分析》第二周作业

    2019-2020-1 20209313<Linux内核原理与分析>第二周作业 零.总结 阐明自己对"计算机是如何工作的"理解. 一.myod 步骤 复习c文件处理内容 ...

  8. 2018-2019-1 20189221《Linux内核原理与分析》第一周作业

    Linux内核原理与分析 - 第一周作业 实验1 Linux系统简介 Linux历史 1991 年 10 月,Linus Torvalds想在自己的电脑上运行UNIX,可是 UNIX 的商业版本非常昂 ...

  9. 《Linux内核原理与分析》第一周作业 20189210

    实验一 Linux系统简介 这一节主要学习了Linux的历史,Linux有关的重要人物以及学习Linux的方法,Linux和Windows的区别.其中学到了LInux中的应用程序大都为开源自由的软件, ...

  10. 2018-2019-1 20189221《Linux内核原理与分析》第二周作业

    读书报告 <庖丁解牛Linux内核分析> 第 1 章 计算工作原理 1.1 存储程序计算机工作模型 1.2 x86-32汇编基础 1.3汇编一个简单的C语言程序并分析其汇编指令执行过程 因 ...

随机推荐

  1. kubernetes1.14.0部署

    2019/4/6/使用kubeadm安装部署kubernetes集群: 前提:1.各节点时间同步:2.各节点主机名称解析:dns OR hosts:3.各节点iptables及firewalld服务被 ...

  2. iso data 聚类算法

    isodata算法就是先拟定一个预期类,再选取一些聚类中心,通过不断合并或者分裂聚类,达到分类的目的 关键就是在于,如何分裂,合并 要合并或者分裂 必须要确定一些指标 所以第一步就是要确定 某些指标 ...

  3. git方法 GUI here

    注:stage changed是将所有修改归集到一次commit,如果要分开commit,则应该使用ctrl+t来一个一个文件的stage

  4. Kubernetes — 为什么我们需要Pod?

    不过,我相信你在学习和使用 Kubernetes 项目的过程中,已经不止一次地想要问这样一个问题:为什么我们会需要 Pod? 是啊,我们在前面已经花了很多精力去解读 Linux 容器的原理.分析了 D ...

  5. 跨域下使用获取iframe的父页面URL

    通常情况下,我们获取iframe父页面的url很简单:parent.location或top.location即可,但前提是它们遵循同源策略. 当iframe与父页面不属于同一个域名时,像上面的获取会 ...

  6. sql sever基本命令

    创建表: create table stu_info( id ,) not null primary key clustered, name ) not null, score numeric not ...

  7. 关于mysql主从架构master宕机后,请求转移问题解决办法

    mysql架构:一主一从 问题一:有两台mysql数据库,已做好主从.如果运行某一天master服务器mysql故障导致前端请求无法处理怎么办? 答:将前端需要数据库处理的请求转移到slave机上. ...

  8. Python——Flask框架

    Flask框架相关知识构架 程序的基本结构 模板 Web表单 数据库 电子邮件 程序的结构 用户认证

  9. CentOS下安装nvm

    1安装版本管理工具git yum install git 查看git版本 git --version 2 安装Node.js版本管理工具nvm curl -o- https://raw.githubu ...

  10. Zookeeper 启蒙

    2018-12-14 关键词: Zookeeper入门介绍 . Zookeeper是什么.Zookeeper架构解析.Zookeeper应用场景.Zookeeper有什么用 本篇文章系笔者依据当前所掌 ...