标签 linux 下的文章

翻译:理解TCP/IP网络栈&编写网络应用(下)

原文地址:原文地址
原作者:Hyeongyeop Kim
翻译:@蛋疼的axb http://2baxb.me
上篇地址:翻译:理解TCP/IP网络栈&编写网络应用(上)

数据结构

以下是一些关键数据结构。我们了解一下这些数据结构再开始查看代码。

sk_buff_structure

首先,sk_buff结构或skb结构代表一个数据包。图6展现了sk_buff中的一些结构。随着功能变得更强大,它们也变得更复杂了。但是还是有一些任何人都能想到的基本功能。

图6 图6:数据包结构

包含数据和元数据

这个结构直接包含或者通过指针引用了数据包。在图6中,一些数据包(从Ethernet到Buffer部分)使用了指针,一些额外的数据(frags)引用了实际的内存页。

一些必要的信息比如头和内容长度被保存在元数据区。例如,在图6中,mac_header、network_header和transport_header都有相应的指针,指向链路头、IP头和TCP头的起始地址。这种方式让TCP协议处理过程变得简单。… Read the rest

初探lowmem_reserve_ratio

背景

最近小伙伴们在排查一个线上关于内存oom的问题,前些天来问我某篇文章里的一句话是什么含义:

每次申请的block大小比较有讲究,Linux内核分为LowMemroy和HighMemroy,LowMemory为内存紧张资源,LowMemroy有个阀值,通过free -lm和/proc/sys/vm/lowmem_reserve_ratio来查看当前low大小和阀值low大小。低于阀值时候才会触发oom killer,所以这里block的分配小雨默认的256M,否则如果每次申请512M(大于128M),malloc可能会被底层的brk这个syscall阻塞住,内核触发page cache回写或slab回收。

出自:

http://blog.csdn.net/gugemichael/article/details/24017515

感觉这句话里混淆了好几个概念,并且一些概念跟自己的理解有冲突,在此说一下自己的理解。对内核研究不深,一些概念可能理解有误,因此文章里给出了比较可靠的参考文档,有兴趣可以进一步了解详情。

lowmem与highmem

关于lowmem和highmem的定义在这里就不详细展开了,推荐两篇文章:… Read the rest

嵌入式Linux开发学习笔记:Linux常用API

文件编程

文件访问(系统调用)

create 创建
open 打开
close 关闭
read 读文件
write 写文件
lseek 移动读写指针
    whence 移动基准
        SEEK_SET 文件头
        SEEK_CUR 当前位置
        SEEK_END 文件尾
    offset 偏移
access 判断权限

R_OK 读
W_OK 写
X_OK 执行
F_OK 存在

文件访问(库函数)

fopen 打开
fread 读文件
fwrite 写文件
fgetc 读取一个字符
fputc 写入一个字符
fscanf 从流中进行格式化输入
fprintf 格式化输出到流中
fseek 定位

SEEK_SET 开始
SEEK_CUR 当前
SEEK_END 结尾

getcwd 获取路径
mkdir 创建目录

时间编程

time 获取日历时间
gmtime 日历时间转为格林威治时间
localtime 将日历时间转为本地时间
asctime 将tm时间转为字符串
ctime 将日历时间转化为本地时间字符串
gettimeofday 今日零时到现在的时间差
sleep 睡眠x秒
usleep 睡眠x微秒… Read the rest

嵌入式Linux开发学习笔记:开发环境

硬件环境准备

综述

如果要学习嵌入式开发,尤其是刚开始学习,那么手边有一个嵌入式设备基本上是必须的。虽然没有设备用仿真器也可以,不过看不到实物的话理解起来会稍微纠结一点。ADS(ARM Developer Suite)
具体来说,学习嵌入式开发要准备的硬件包括:
1、开发板
2、PC与开发板的连线

开发板

开发板(demoboard)是用来进行嵌入式系统开发的电路板,包括中央处理器、存储器、输入设备、输出设备、数据通路/总线和外部资源接口等一系列硬件组件。开发板一般由嵌入式系统开发者根据开发需求自己订制,也可由用户自行研究设计。开发板是为初学者了解和学习系统的硬件和软件,同时部分开发板也提供的基础集成开发环境和软件源代码和硬件原理图等。常见的开发板有51、ARM、FPGA、DSP开发板。
对于学习者来说,有一个开发板可以对嵌入式开发有更直观的了解,如果说不缺那么几百块钱的话,还是买个好些。基本上这个开发板能帮你渡过从入门到掌握之间的阶段。… Read the rest

嵌入式Linux开发学习笔记:嵌入式开发基础

嵌入式开发概述

嵌入式系统的概念

嵌入式系统的定义为:以应用为中心、以计算机技术为基础、软硬件可裁剪、适用于应用系统,对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

简单地说,嵌入式系统就是设计适用于某个功能的专用硬件,搭配与之对应的经过优化的操作系统,并在其中运行这个设备专属的软件

嵌入式系统的特点

  1. 软件、硬件可裁剪
  2. 对功能、可靠性、成本、体积、功耗严格要求

嵌入式开发的方向

硬件层

是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成CPLD的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言。… Read the rest

Linux系统使用学习笔记:日常操作

Shell热键

Tab*2
命令补齐

Ctrl+C
中断当前程序

Ctrl+D
=exit

切换终端
文字模式CTRL+ALT+F1-F6
图形模式CTRL+ALT+F7
启动xwindow:startx

命令

关机

shutdown
关机

sync
将数据同步写入硬盘中

reboot
重启

poweroff

halt

系统管理

ls
列目录
参数
-al
列出所有的文件详细的权限与属性
 
    当为[ d ]则是目录,例如上表档名为『.gconf』的那一行;
    当为[ – ]则是文件,例如上表档名为『install.log』那一行;
    若是[ l ]则表示为连结档(link file);
    若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
    若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

info
chm版man
快捷键

A B
空格键 向下翻一页
[Page Down] 向下翻一页
[Page Up] 向上翻一页
[tab] 在node 之间移动,有node 的地方,通常会以* 显示。
[Enter] 当光标在node 上面时,按下Enter
Read the rest

Linux系统使用学习笔记:文件系统

分区Pattern

分区基础知识

主要启动记录区(Master Boot Record, MBR)

可以安装启动管理程序的地方,有446 bytes

分割表(partition table)

记录整颗硬盘分割的状态,有64 bytes

每个分区对应的文件
主分区1-4
扩展分区5-n:IDE5-63 SATA5-15

文件系统类型

ext2/ext3
是Linux适用的档案系统类型。

physical volume (LVM)
这是用来弹性调整档案系统容量的一种机制, 可以让你的档案系统容量变大或变小而不改变原有的档案数据内容

software RAID
利用Linux操作系统的特性,用软件模拟出磁盘阵列的功能

swap
就是内存置换空间!由於swap并不会使用到目录树的挂载, 所以用swap就不需要指定挂载点

vfat
同时被Linux与Windows所支援的档案系统类型

目录

目录说明

/ (root, 根目录):
与开机系统有关
 

以下目录不可与根目录分开
/etc:配置文件
/bin:重要执行档
/dev:所需要的装置文件
/lib:执行档所需的函式库与核心所需的模块
/sbin:重要的系统执行文件
Read the rest

分类目录