C程序不全是从main开始的 — 以QEMU中qcow2模块初始化为例

0. GCC的attribute关键字

这是GCC的一个特性,gcc可以使用attribute关键字,格式如下:

其中attribute_name中有两类constructordestructor类似C++中类的构造和析构的概念,只不过是相对main()函数来说的。简单说,__attribute__((constructor))定义的函数在main前执行,__attribute__((destructor))定义的函数在main后执行。[...] 阅读全文

用C、Python和Shell语言在终端打印格式化和彩色文本

例子

以打印一个蓝色斜体的”hello, world“为例:

  • C

  • python

[...] 阅读全文

在awk中如何使用或赋值shell的变量

写shell脚本处理文本的时候,经常用到awk来配合shell命令。但是awk的大括号中和shell貌似是两个世界。本文只介绍最容易理解的方法(作者水平有限,复杂的以后可能补充),来实现awk对shell变量的使用和更改。

如果我们将awk看成变成语言中的函数,或者一个封装,那么要使用或者修改外部的变量,其实就是输入参数和输出返回值的问题。对于使用shell变量,其实就是shell变量怎么作为参数传入awk的问题;而对于awk给shell变量赋值,可以看成awk输出返回值的问题。

awk中使用shell变量

awk传入参数的选项是-v [awk_var=$SHELL_VAR],应该加在’ ‘包围的awk主体程序之前。[...] 阅读全文

The UAPI header file split 翻译:内核源码中UAPI头文件分割

在LWN.net上的一篇文章,The UAPI header file split(By Michael Kerrisk July 25, 2012)。原文链接:https://lwn.net/Articles/507794/

这个特性已经在3.7版本中被Linus大神接受[详情]。。。Linus大神如是说:

the “uapi” include file cleanups. The idea is that the stuff exported to user space should now be found under include/uapi and arch/$(ARCH)/include/uapi.

Let’s hope it actually works. Because otherwise this was just a
totally pointless pain in the *ss. And regardless, I’m definitely done
with these kinds of “let’s do massive cleanup of the include files”
forever.

下面我逐段意译一下文章。。。[...] 阅读全文

Qemu KVM 虚拟机通过虚拟网桥实现桥接和NAT的实验

系统概况:

  • host 和 guest 都是用的 Ubuntu Server 16.04系统。
  • 我的 host 机上有三块网卡2块有线网卡(接口 enp1s0 和 enp3s0)和1个无线网卡(接口 wls2s0)。
  • 我的 host 机通过无线网卡连在一个路由器上,并因此能够连接到互联网,所在的网段是192.168.3.0\24,ip 固定为192.168.3.5。
  • 其他两块有线网卡没有连接。

实验0:

效果:

guest 与 guest、guest 与 host 之间可以互相 ping 通;guest 不能访问 host 所在路由器网段(192.158.3.0\24)。

方案:

在 host 中搭建了一个虚拟网桥,将 qemu-bridge-helper 工具在启动虚拟机时创建的虚拟网络接口 tap0[1,2…] 与 host 桥接在一起,我手动配置了他们的网段是192.168.4.0\24。

步骤:

1.配置 host 的 /etc/network/interfaces ,在其中加入以下内容,然后通过 /etc/init.d/networking restart 重启服务来创建网桥。[...] 阅读全文

In-kernel memory compression 翻译:内核内实现的内存压缩

(发布于 April 3, 2013, 意译于12/9/2016)

  • 原文链接 :https://lwn.net/Articles/545244/
  • 另一个版本的翻译(有些句子没有翻): http://kernel.taobao.org/index.php?title=%E5%86%85%E6%A0%B8%E6%9C%88%E6%8A%A52013-04#In-kernel_memory_compression
  • 吐槽 : 我的天呐!!翻译完我才发现有人翻译过了,早知道我就不自己翻译了,痛苦死我了。。
  • :内容我还没有完全理解,仅供参考,以原文为准。

阿姆达尔定律告诉我们一个计算机系统肯定存在一个瓶颈。历史上,对于很多工作负载这个瓶颈都是cpu,所以人们在不断提升cpu性能。所以现在,渐渐地,ram成为了瓶颈。有时当数据在ram和disk之间来回传递时,cpu就在一边干瞪眼呢。增大ram有时并不是一个好的或者经济的做法,更快的I/O或者ssd可以缓解问题,但是不能消除这个瓶颈。

如果可以增大ram中数据的有效容量,不是很好吗?既然cpu闲置,也许我们可以拿闲置的cpu周期来专注这件事。这就是内核内压缩的目标:用闲置的cpu周期来做ram中的压缩和解压缩。[...] 阅读全文

Shell脚本中进行多行注释的方法

我发现。。shell脚本貌似不像C或者Python一样自带注释语法,不过拐弯抹角还是有一些方法的。。囧

方法1:利用逻辑语句

利用了逻辑语句的执行顺序,缺点是注释中不能出现括号,否则会报错!

[...] 阅读全文

两台服务器间SSH或SCP实现无密码登录或文件传输

最近由于需要实现从一个客户端电脑定时远程上传图片到阿里云服务器的功能,需要实现SCP的免密码传输。所以查资料并做了一个记录,希望对大家有帮助。

步骤

1.Client上某用户执行ssh-keygen命令,生成建立安全信任关系的证书

[...] 阅读全文

qemu/qemu-kvm/qemu-system-x86_64/qemu-x86_64命令的区别?

刚想玩玩kvm,结果分不清这几个命令。。搜了一下,记录下来,希望对大家有帮助。

摘抄

1

在老版本中有单独的qemu-kvm模块存在,结合qemu一起做虚拟机工作。在后续新版本中,已经将qemu-kvm模块完全合并到qemu中去。因此当需要使用kvm特性时候,只需要qemu-system-x86_64 启动命令中增加参数 –enable-kvm参数使能即可。

(http://blog.csdn.net/tantexian/article/details/41281171)[...] 阅读全文

Intel Galileo开发版PCI-e无线网卡wifi配置

由于网上很多配置wifi的方式在我的伽利略开发板上都行不通,最后终于找到这个可以用的“冷门”办法:

系统配置

开发板: Intel Galileo gen2
无线网卡:PCI-e intel wifi link 5100
开发板系统: EGLIBC based Linux(download)

所用工具

硬件:

usb无线网卡或者pci-e接口的无线网卡。
(注意如果你用的是和我一样的pci-e网卡,注意顺便买来天线接上,不然信号贼弱,这种网卡不接天线是不行的。)[...] 阅读全文