Linux
文章平均质量分 66
arvik
嵌入式
展开
-
Linux内核中创建线程
在Linux内核空间和用户空间创建线程的函数不一样。Linux内核下创建线程要先包含 linux/kthread.h头文件内核线程创建: kthread_create函数声明struct task_struct *kthread_create(int (*threadfn)(void *data), void *data,原创 2015-10-14 14:47:14 · 3845 阅读 · 0 评论 -
【json】jsoncpp函数接口
json、json-c、jsoncpp是3套不同的代码,其中的函数接口也大不一样,其中jsoncpp针对c++语言编写的。json-c比json要复杂一些,处理、容错能力稍强一些。jsoncpp中json被抽象成了Value类,jsoncpp中还有Writer和Reader类,分别对json进行输出和输入Reader类:从文本解析json构造函数Reader(); //空构造函数Reader(co原创 2016-06-24 23:50:17 · 2575 阅读 · 0 评论 -
vsftpd配置
(vsftpd配置文件解释,网络搜集)anonymous_enable=YES 允许匿名登录local_enable=YES 允许本地用户登录 write_enable=YES 开放本地用户写权限 local_umask=022 设置本地用户生成文件的掩原创 2016-07-16 12:41:45 · 510 阅读 · 0 评论 -
uci源码 API
uci函数接口都在uci.h文件中struct uci_context *uci_alloc_context(void)动态申请一块内存用于struct uci_context结构。void uci_free_context(struct uci_context *ctx)释放struct uci_context结构内存,以及为其成员申请的所有内存void uci_perror(struct uc原创 2016-06-22 10:52:11 · 2586 阅读 · 0 评论 -
【json】json-c接口
json、json-c、jsoncpp是3套不同的代码,其中的函数接口也大不一样,其中jsoncpp针对c++语言编写的。json-c比json要复杂一些,处理、容错能力稍强一些。json-c的api介绍:json_object.h文件常用的api/*增加obj的引用计数*/struct json_object* json_object_get(struct json_object *obj)原创 2016-06-22 13:05:31 · 9057 阅读 · 1 评论 -
最适合新手学习的http服务器——tinyhttpd
tinyhttpd是一个非常小的http服务器,一个c文件,十多个函数,总共500多行代码,但清晰解释了web服务器的处理流程,可谓是麻雀虽小,五脏俱全。拿tinyhttpd源码做例子对于一个想了解web服务的新手来说非常合适! 新手花个20分钟时间学习之后再去学习其它的Web服务器时就容易多了。http.c源码: 每个函数的作用都给出了解释,自个阅读吧!/* J. David's webser原创 2016-10-28 15:25:43 · 2472 阅读 · 0 评论 -
json-c的树型封装(json-tree)
arvik以前运用json-c库的时候对json-c库做了一下封装,以简化json取值/设置过程。由于json-c在取值的时候必须层层获取对象,当一个json对象中嵌套许多json对象的时候,取值就变得越来越繁琐。json-tree的封装就是为了消除运用json-c取值的中间过程。——json-tree的写作背景以下就简要介绍下吧使用描述取值对于如下一个json对象root来说,想获取ssid1的值原创 2016-10-31 14:07:05 · 2117 阅读 · 2 评论 -
linux内核红黑树运用小实例
linux内核版本linux-3.10.36结构linux内核的rb_node结构体struct rb_node { unsigned long __rb_parent_color; struct rb_node *rb_right; struct rb_node *rb_left;} __attribute__((aligned(sizeof(long原创 2016-12-01 11:11:34 · 2441 阅读 · 0 评论 -
三步安装最新版gitlab
闲着没事安装了一下gitlab,按照官方文档给的方法,过程还是比较简单的,记录如下:arvik安装的是目前最新版gitlab EE版本 v8.17 系统用的是64位ubuntu16.04,并且官方文档推荐用最新版,推荐在 内存>=4GB,CPU核心 >= 2 的环境下安装使用按照以下步骤安装:安装和配置必要的依赖:sudo apt-get install curl openssh-server原创 2017-03-12 14:24:33 · 2005 阅读 · 0 评论 -
新手初次使用Git实战经历
下载了Git-2.6.4-32-bit,大概29M左右,第一次使用git开始~~~首先建议先看一下 git简明指南(http://rogerdudler.github.io/git-guide/index.zh.html) ,弄清git的工作流!要不然命令看起来可能会犯糊涂。第一个命令我敲了git help,主要看看它有哪些命令Administrator@PDPQV5D3CUSX7ZL MINGW3原创 2016-01-14 10:53:57 · 7329 阅读 · 0 评论 -
ubuntu下几个服务的在线安装命令记录
Samba软件包的安装使用源安装,在终端中输入如下命令:#sudo apt-get install samba#sudo apt-get install smbclientSamba服务器的启动、关闭和重启启动Samba服务器只需执行如下命令:sudo /etc/init.d/samba start关闭Samba服务器:sudo /etc/init原创 2017-03-31 20:18:41 · 2139 阅读 · 0 评论 -
nginx配置文件
(文章整理的内容为网络搜集) nginx配置文件语法: location [=|~|~*|^~] /uri/ { … } 符号 解释 范例 = 开头表示精确匹配 location = /login {…} ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /sta原创 2016-07-18 09:24:30 · 1348 阅读 · 0 评论 -
【Linux调试经验】编译时sscanf参数警告不可忽略
本人在为一款路由器写一个linux内核模块时遇到如下问题。问题: 从一块内存buf中格式化字符到变量中,发现变量的值总是不正确。发现: 写好的代码编译和链接能通过,运行就可能出错了。以前该模块写成后在交叉编译器mipsel-linux-gcc(版本:V3.4.2)下运行没问题,后来换成V4.6.3版本后编译,运行就不正确了。(其实代码本身就有问题,代码在mipsel-linux-gcc V4.3原创 2016-01-26 18:49:33 · 1549 阅读 · 0 评论 -
【Linux调试经验】局域网内数据传输不经过路由
问题/发现:本人在为一款路由器写一个统计局域网互传流量的Linux内核模块的时候,发现如下问题: 局域网内的一台设备和该局域网内另一台设备进行通信时,我在路由器的netfilter链表处设下钩子,以捕获数据。后来发现这些数据没有经过netfliter,而是直接投递到对方网卡上的。设备物理连接图如下:解释:看似 个人手机 和 个人PC 这两台设备交换数据时 数据包“经由”了路由器,实际上,数据包如下原创 2016-03-10 16:54:21 · 3592 阅读 · 1 评论 -
c 库文件
C库头文件(C99)头文件及其对应描述如下<assert.h> //断言<complex.h> //复数<ctype.h> //字符处理<errno.h> // 错误类型 <fenv.h> //浮点环境 <float.h> //浮点类型 <inttypes.h> //整数类型格式转换 <iso原创 2015-11-07 15:12:27 · 2060 阅读 · 0 评论 -
make命令
make 命令用途维护、更新和重新生成程序组。语法make [ -DVariable ] [ -d Option] ] [ -e ] [ -i ] [ -k ] [ -n ] [ -p ] [ -q ] [ -r ] [ -S ] [ -s ] [ -t ] [ -f MakeFile … ] [ Target … ]描述make 命令辅助您维护程序集。输入 make 命令原创 2016-05-30 18:09:23 · 3672 阅读 · 0 评论 -
netlink快速使用例程(linux-3.10.36)
linux-3.10.36版本的内核相比linux-2.6.36版本中netlink的代码有所变化,以前的代码已经不能成功编译了。netlink是linux内核的一套基于socket的通信机制,那么,只需要知道怎么创建套接字,发送数据,接收数据就行了。内核层:netlink API初始化操作:新的netlink_kernel_create()函数只有3个参数了。/******************原创 2016-05-17 10:00:30 · 6937 阅读 · 6 评论 -
【以太网数据结构】IP协议
IP协议数据包格式:IP协议最终目的是把数据从源传送到目的地,它不保证数据传送的靠性性! 主要作用:数据传送:将数据从一个主机传到另一个主机寻址:根据子网划分IP地址,发现正确的目的主机地址路由选择:选择数据在互联网上的传送路径数据报文的分段:当传送的数据大于MTU时,将数据进行分段发送和接收并组装协议字段解释:版本:IP协议版本号,长度为4位。对于IPV4,原创 2015-10-12 21:14:37 · 4656 阅读 · 0 评论 -
【智能路由器】开篇
自从以极路由为首的一系列公司开始对无线路由器进行智能化改造后,我们公司也按捺不住,想搞搞智能路由器,之前公司研发基本没什么核心技术,拿着MTK给的方案和一套SDK,改改路由器首页界面就是自己的产品了,在接触了一段时间的智能路由器后准备写些文章与大家分享——网上相关资料是在太少。原创 2015-11-18 14:35:14 · 17319 阅读 · 4 评论 -
【智能路由器】源码追踪路由器启动过程
首先来张图简要的从源码的角度展示一下Linux内核的路由器启动过程: 下面的重点是关注一下,kernel启动后,从第一个用户进程执行,到系统启动完毕,做了哪些事。1. 路由器内核启动执行流程 UBoot在设置好一些环境参数后会将PC指针指向内核代码,从此CPU就交由Linux全权掌控。网上很多详解Linux启动的文章,在此就不多此一举的分析代码了,但还是画个流程图。 注原创 2015-10-30 08:44:02 · 19845 阅读 · 0 评论 -
【以太网数据结构】以太网头部
以太网封包格式如图所示: 以太网目的地址和源地址各占6个字节,该地址即平常所说的网卡的MAC。每个网卡在全球拥有唯一的MAC!在地址后面有两个字节表示类型,如:0800表示此真数据是IP数据,0806表示ARP请求。后面博客会针对讲解。类型字段之后是数据,对于以太网,数据段大小为46-1500字节,不足46字节的数据将被自动补足到46字节。如ARP协议的数据格式为28字节,为了符原创 2015-11-24 17:14:03 · 12141 阅读 · 0 评论 -
【以太网数据结构】地址解析协议ARP
ARP数据包结构:(看不清可将图片放大查看) 为什么有ARP? 在以太网为基础的局域网中,每个网络接口都有一个硬件地址,即MAC。在局域网中必须知道网络设备的硬件地址才能向目的主机发送数据,而在广域网中数据传输的目的地址是IP地址。 要保证数据准确的传输到目的地必须建立IP地址和硬件地址的映射关系,所以有了ARP。ARP穿着一件外套——以太网头部,此时以太网头部目的地址为ff ff ff ff原创 2015-11-24 18:56:05 · 2989 阅读 · 0 评论 -
linux虚拟文件系统proc
Linux根目录下的/proc是系统的虚拟文件系统。其结构如下:/proc ----1/ |---2/ |...(一系列以进程PID命名的文件夹) |---bus/ 该文件夹下存放总线设备 |---driver/ |---fs/ |---irq/ |---scsi/原创 2016-01-05 17:03:31 · 5078 阅读 · 0 评论 -
【Linux应用层】防火墙iptables命令
iptables作用展示:iptables的四个表: raw表有2个链:prerouting、output mangle表有5个链:prerouting、postrouting、input、output、forward nat表有3个链:prerouting、postrouting、output filter表中有3个链:input、output、forward原创 2015-11-23 20:09:05 · 2748 阅读 · 1 评论 -
【Linux内核层】深入netfilter编程
由于【智能路由器】系列系列博客中好几篇文章都用到了netfilter来实现路由器中的部分功能,所以写这篇博客来阐述一下我在使用netfilter框架编程时的看法。我尽量以简洁的语言描述netfilter编程要点。5个钩子点分别为:PREROUTING、POSTOUTING、INPUT、FORWARD、OUTPUT,下面给了一个很简洁的框架图,想必大家很熟悉 注意到:我在netfilter的5个钩子原创 2015-12-04 22:49:45 · 7137 阅读 · 3 评论 -
Makefile笔记整理
GCC常用选项-DMACRO选项 -DOS_LINUX将宏定义OS_LINUX-Idir 添加头文件搜索目录dir-Ldir 添加链接库搜索目录dir。gcc优先使用共享程序库-static 仅选用静态程序库进行链接,如果一个目录中静态库和动态库都存在,则仅选用静态库-g 包括调试信息-On 优化程序,n代表优化级别,n常为2-Wall 打开警告信息M原创 2016-02-26 10:57:33 · 2565 阅读 · 0 评论 -
sscanf用法整理
函数原型:int sscanf(const char *buffer,const char *format,[argument ]...);参数: buffer 存储的数据 format 格式控制字符串 argument 选择性设定字符串sscanf会从buffer里读进数据,依照argument的设定将数据写回。 成功则返回参数数目,失败则返回0,错误原因存于errno中转载 2016-03-11 11:39:44 · 2456 阅读 · 0 评论 -
TCP并发服务器模型(一)
本篇叙述的TCP并发服务器模型如下图所示: 服务器创建并绑定套接字后fork出几个子进程,子进程中分别进行accept(该函数为阻塞函数)、recv、处理数据然后再次acept,这样循环下去。所有客户端发来的信息都是直接由子进程处理。 例程 代码如下,在处理客户端请求之前,服务器先fork了3个子进程,然后将客户端的请求直接交由子进程处理。 该例程中,服务器fork子进程后,子进程监听并接收原创 2016-03-14 10:13:47 · 3177 阅读 · 0 评论 -
TCP并发服务器模型(二)
本篇博客讲述单客户端单进程的TCP服务器并发模型。该模型由主进程统一处理客户端的连接,当接收到客户端连接后再临时fork()进程,由子进程处理客户请求。模型如下图所示: 例程: 结合图示,程序易懂,代码就不解释了。 服务器端代码:/*author:arvikpurpose:test the server simultaneityemail:1216601195@qq.comcsdn:原创 2016-03-15 11:47:59 · 1323 阅读 · 0 评论 -
TCP并发服务器模型(三)
本篇博客讲述的是单客户端单线程模型,该模型同样由主进程统一accept,只是将fork改为了pthread_create。 与进程相比,线程有很多优点(速度快,占用资源少,数据可以共享),该模型结构如图所示: 与上一篇博客讲述的模型非常类似,源代码同上一篇相比只有少量更改而已,亦不讲解。服务器端代码如下:/*author:arvikpurpose:test the server simult原创 2016-03-15 16:14:44 · 1245 阅读 · 0 评论 -
openwrt创建软件包
本文是转载openwrt中文版的wiki。原文地址:https://wiki.openwrt.org/zh-cn/doc/devel/packages创建软件包我们已经尝试做的一件事情,是让移植软件到OpenWrt的操作变得非常容易。如果打开OpenWrt里的一个软件包的目录(OpenWrt/Package/* 或 OpenWrt/feeds/packages//),通常会发现几样东西:packag转载 2016-05-03 16:12:55 · 748 阅读 · 0 评论 -
【arvik开源项目】impush简介
前言impush算是arvik在csdn上开源的第二个项目。arvik早有想写个高并发服务器的想法了,arvik编写服务器没什么经验,正好锻炼锻炼自己的能力,最近一个月时间都比较清闲,所以就尝试着写了…写的时候就想到开源出来了,大多数开源项目都是作者觉得比较得意、拿得出手,才将其开源出来。我的项目一边写就一边开源了,大有实战的味道。童鞋们见到的肯定是一个不完整的、bug较多的、一步步完善起原创 2017-03-12 14:39:12 · 1757 阅读 · 0 评论