- 博客(18)
- 资源 (1)
- 收藏
- 关注
原创 POSIX消息队列 发送接收简单子
Linux的函数库提供有两种消息队列,一种是POSIX消息队列,另一种是SYS V消息队列。这里介绍POSIX消息队列。涉及到的函数主要有:mq_open() - 创建消息队列mq_close() - 关闭消息队列mq_send() - 往消息队列里发送消息mq_receive() - 从消息队列里接受消息消息队列实际上是一个文件,因此需要消息队列虚拟文件系统的支持。通常系统启
2012-12-22 15:23:12
1319
原创 iptables IP转发
有两台服务器:A:219.246.xxx.yyy。这是一个内网地址,外网无法访问。B:202.201.aaa.bbb。这是一个公网地址,它和xxx.lzu.edu.cn这个域名绑定。两台服务器上都跑了一个HTTP的服务,他们之间可以互相访问。现在希望访问mmm.lzu.edu.cn时,能自动跳转到219.246.xxx.yyy上,因此可以做IP转发,或叫IP映射。来使所有发到202
2012-09-14 09:09:31
5358
原创 结构体中的零长度数组
参考:http://hi.chinaunix.net/?uid-21744621-action-viewspace-itemid-48823struct node { int len; int array[];};这种零长度的的数组是为了方便结构体长度的动态扩展。一个 node 的结构体,它的长度并不包括 array[]。但是如果使用 ma
2012-04-19 10:18:31
1275
原创 关于 XtratuM 的中断接管过程
这里分析的是 XtratuM 1.0 的代码。关于 XM 中断接管的代码主要在 arch/$ARCH/kernel/irq.c ($ARCH = i386) 中。还有一部分在 patch 文件中,不过那个貌似关系不是很大,主要是替换了某些 cli 和 sti 指令,但是这些替换后的代码实质上和 cli、sti 的作用是一样的,所以我也有点奇怪为什么要有这样的替换,貌似不替换也是可以的……
2012-04-15 13:23:06
971
原创 PowerPC OpenFirmware
参考:Documentation/devicetree/booting-without-of.txtOF 是在 PowerPC 上,用于在系统加点或者重启时,初始化设备的,这些都是为操作系统的启动做准备工作。bootloader 会把系统中某些设备组织在一个树形表中,然后会把这个表传给内核。参数的传递是通过寄存器完成的,其中: r3:指向 device-tree block
2012-04-13 21:54:06
1270
原创 x86从 start_kernel 开始的中断初始化
以下主要看了 linux 3.2 中,从 start_kernel() 开始的一些跟中断有关的初始化代码,并做了一点点简单的分析。start_kernel() 在 init/main.c 中,其中和中断有关的大概就有这样一些函数:/* filename: init/main.c */467 asmlinkage void __init start_kernel(void)468 {
2012-04-13 21:45:04
2592
原创 PowerPC 堆栈
PowerPC 在处理器级别上是没有实现堆栈操作的,也就是说,在 PowerPC 架构中,没有专门的堆栈操作汇编命令。但事实上 PowerPC 又使用到了堆栈,比如在函数调用、传参、返回错误码等操作。 在讲 PowerPC 堆栈处理之前,先提一下要用到的某些寄存器。首先是32个通用寄存器 GPR0 ~ GPR31。据说这32个寄存器是64位的,但是高32位的访问方式不同,通常只用
2012-03-19 13:38:05
3429
原创 Archlinux conky配置
conky 是一个轻量级的系统监视器,可以实时反映出系统的相关信息。参考: http://www.linuxidc.com/Linux/2011-02/32508.htm有图有真相代码主要和参考中的一致,只是天气那块我是自己用 python 写的,因为原来的 weather.com 已经不能用了,所以也就不需要安装 conkyforecase 这个东西。
2012-03-10 22:11:14
3500
原创 U-Boot: inflate() error 和 unable to open an initial console
最近开始做 PowerPC 上的一些东西,在编译内核,启动内核的过程中遇到了很多问题,这两天都块搞屎我了…… 不过最终还是解决了,现在把我遇到的问题和解决办法贴在这里,可以供大家参考,也方便我下次遇到同样的问题时可以迅速的找到解决方案。但是需要说的是,导致同样问题的原因可能是多样的,所以我的方法不一定百分百能解决大家的问题。先说下我的环境:主机:Archlinux (
2012-02-29 21:26:28
2213
转载 在enum中的宏定义
转自:http://bbs.chinaunix.net/thread-795201-1-1.html 今天在代码里看到有一点很奇怪的代码,代码定义了一个枚举类型,但是这个枚举类型没有变量名,而且在其中包含了宏定义,宏定义也是自己定义自己enum { exit_domain_nr,#define exit_domain_nr exit_domain_n
2012-02-24 20:26:33
2275
翻译 initrd 和 initramfs
原文:https://www.linux.com/learn/linux-training/92607-the-kernel-newbie-corner-qinitrdq-and-qinitramfsq-whats-up-with-thatinitrd:initial ramdiskinitramfs:initial ram filesystem 这两个东西都是我们经常会用到
2012-02-11 17:03:28
2163
原创 用堆栈做队列
程序中的临时变量都是存放在进程的堆栈中的,那么要实现队列,只需要在一次函数调用中不释放函数中的局部变量,然后让一个指针始终指向队列头,另一个指针始终指向队列的第二个成员就可以了。这时,就需要被调用的函数不能退出,那么它的所有局部变量就不会被释放。为了做一个例子,我们让一个函数递归调用它自身,知道满足一定条件以后,才能把堆栈中的函数取出来继续执行。当然,在现实中,更多的情况是某些进程因为
2011-12-13 19:45:43
683
转载 Linux 内核DMA机制
DMA控制器硬件结构DMA允许外围设备和主内存之间直接传输 I/O 数据, DMA 依赖于系统。每一种体系结构DMA传输不同,编程接口也不同。数据传输可以以两种方式触发:一种软件请求数据,另一种由硬件异步传输。在第一种情况下,调用的步骤可以概括如下(以read为例):(1)在进程调用 read 时,驱动程序的方法分配一个 DMA 缓冲区,随后指示硬件传送它的数据。进程进
2011-11-29 21:44:37
2677
原创 container_of -- 巧妙的宏定义
内核中的 container_of() 宏定义container_of() 宏的功能就是通过结构体中的一个元素,来找到这个结构体的首地址。先来看看他的代码:// include/linux/kernel.h#define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member )
2011-11-29 21:04:48
741
原创 Bash - the shell (2)
1. 更改bash为vi模式 bash默认是使用emacs模式,就是说在命令行编辑命令的很多快捷键是和emacs一样的(快捷键《bash-the shell(1)》中讲过了)。但是除了emacs,另外一个神器就是vi(vim)。vi是一个遵循POSIX的文本编辑器,因此如果需要让shell具有模式兼容性的话,让bash工作在vi模式是很有必要的。使用以下命令切换bash的模式:
2011-10-29 17:01:10
957
原创 强制重启Linux
前段时间服务器出了问题,挂载iscsi的过程中貌似出了问题,+C无法终止程序,kill,pkill,killall都没有效果。实在是没办法了,想着干脆重启好了,结果reboot,没有响应…… 服务器又托管在网络中心的,没办法直接关电源。后来从网上搜了两条命令,可以强制重启,在这里记录一下,以后遇到同样的问题就好解决了~# echo 1 > /proc/sys/kernel/sysrq#
2011-10-25 21:06:31
5450
原创 Bash - the shell (1)
1. 什么是shell? shell是一种用户接口,我们可以通过shell来与计算机进行通信,或者说可以通过shell来操作计算机。所以任何可以操作计算机的程序应该都可以叫做shell。事实上,shell是一个循环执行的程序。它的框架可以大体表示如下:while you do not exit or logout { print a prompt read a stri
2011-10-25 20:09:47
841
原创 Linux C SQLite3 编程
SQLite3 SQLite是一个轻量级的数据库。和常用的MySQL大同小异。和MySQL相比,数据类型基本一样,只是sqlite的指令都是以"."开头(如:mysql中查看当前有哪些数据库是“show databases",而sqlite中是".databases")。当然,SQL语句都是一样的语法规则。Host System: Archlinuxgcc: 4.6.1 2
2011-10-24 21:15:24
2063
Embedded Linux Primer: A Practical, Real-World Approach
2012-10-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人