![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
文章平均质量分 83
cupidove
这个作者很懒,什么都没留下…
展开
-
宏定义
/* Reverse the bytes in a 16-bit value */#define BITSWAP16(val) \ ((uint16)((((uint16)(val) & (uint16)0x00ffU) << 8) | \ (((uint16)(val) & (uint16)0xff00U) >> 8)))/* Reverse the bytes in a 32-原创 2015-03-04 11:33:03 · 923 阅读 · 0 评论 -
c++ 正则表达式
#include #include #include #include #include #include #include #include #include void demo_regex(){ std::locale loc(""); std::wcout.imbue(loc); std::wstring text(_T("我的IP地址是:109.168.原创 2015-01-08 16:50:22 · 732 阅读 · 0 评论 -
源码编译安装samba
1、解压、编译、安装#tar xzvf samba-3.6.9.tar.gz#cd samba-3.6.9/source3#./configure && make && make install没用路径参数,因为默认是/usr/local/samba2、配置smb.conf,比较关键的一步默认情况下,samba软件包会被安装到目录/usr/local/samba/下,但是现原创 2015-08-18 18:38:07 · 7033 阅读 · 0 评论 -
运用Autoconf和Automake生成Makefile
一、 相关概念的介绍什么是Makefile?怎么书写Makefile?竟然有工具可以自动生成Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚。 1. Makefile makefile用来定义整个工程的编译规则。一个工程中的源文件计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指转载 2015-08-19 14:50:16 · 394 阅读 · 0 评论 -
运用Autoconf和Automake生成Makefile 2
六、 能力进阶以上的的程序还只是处于初级阶段,并且生成的是 静态库 。我们可以发现,用autoconf和automake生成Makefile的关键在于configure.in和Makefile.am的文件的书写。所以,要想使自己的功力更上一层,需要熟悉autoconf和automake这两个工具的使用,其中有很多重要的宏需要我们了解。这里时具体的参考手册:autoconf手册转载 2015-08-19 14:57:00 · 489 阅读 · 0 评论 -
交叉编译的configure
Cross-CompilationTo cross-compile is to build on one platform a binary that will run on another platform. When speaking of cross-compilation, it is important to distinguish between the build platf转载 2015-08-19 15:11:39 · 2708 阅读 · 0 评论 -
cmake 例子1
看来不学习一下cmake是不行了,一点一点来吧,找个最简单的C程序,慢慢复杂化,试试看:例子一单个源文件 main.c例子二==>分解成多个 main.c hello.h hello.c例子三==>先生成一个静态库,链接该库例子四==>将源文件放置到不同的目录转载 2015-10-28 15:05:49 · 468 阅读 · 0 评论 -
cmake使用示例
cmake中一些预定义变量PROJECT_SOURCE_DIR 工程的根目录PROJECT_BINARY_DIR 运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/buildCMAKE_INCLUDE_PATH 环境变量,非cmake变量CMAKE_LIBRARY_PATH 环境变量CMAKE_CURRENT_SOURCE_DIR 当前处理的CMakeLists.转载 2015-10-28 14:52:55 · 526 阅读 · 0 评论 -
cmake 例子2
这次应该简单看看语法和常用的命令了。简单的语法注释# 我是注释命令语法COMMAND(参数1 参数2 ...)字符串列表A;B;C # 分号分割或空格分隔的值变量(字符串或字符串列表)set(Foo a b c)设置变量 Foocommand(${Foo})等价于 command转载 2015-10-28 15:06:37 · 494 阅读 · 0 评论 -
c++ regex && sed正则表达式删除控制台特殊控制符
在c++中,有三种正则可以选择使用,C ++regex,C regex,boost regex ,如果在windows下开发c++,默认不支持后面两种正则,如果想快速应用,显然C++ regex 比较方便使用。文章将讨论C++ regex 正则表达式的使用。C++ regex函数有3个:regex_match、 regex_search 、regex_replaceregex_ma原创 2015-05-20 15:09:48 · 2464 阅读 · 0 评论 -
通过命令连接wifi
Step 1: Find available WiFi adapters – WiFi network from command lineThis actually help .. I mean you need to know your WiFi device name before you go an connect to a WiFi network. So just use转载 2015-04-28 18:26:15 · 10817 阅读 · 0 评论 -
问题解答理解802.11n
802.11n Frequently Asked QuestionsWhile 802.11n technology brings enormous benefits in terms of increased coverage, throughput and capacity, it also requires careful planning and optimization fo转载 2015-04-22 11:38:49 · 4278 阅读 · 0 评论 -
openwrt lan wan配置
想要改变你的路由器wan口和lan口配置或者添加wan口等就需要用到vlan配置openwrt中的配置文件为/etc/config/network如下将port0设置为wan口config switch_vlan option device eth0 option vlan 0 option ports "1 2转载 2015-04-13 09:45:39 · 6281 阅读 · 0 评论 -
搭建OpenWrt开发环境(包括编译过程)
OpenWrt是一个高度模块化、高度自动化的嵌入式linux发行版,其编译和安装过程比普通的linux发行版而言,要简单太多了。如果您是新手,您那恐惧的心大可放到肚子里,呵呵。对于新手来说最麻烦的恐怕是安装开发环境需要的软件了。最基本条件:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++转载 2015-04-15 09:06:14 · 1157 阅读 · 0 评论 -
openWRT的ipk编译方法
1:编译时要配置内核,make menuconfig。配置Build the OpenWrt SDK ,前提条件是openwrt编译成功2:在编译好的文件中会有/bin/mvebu/OpenWrt-SDK-mvebu_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-i686.tar.bz23:然后解压这个文件tar xvf OpenWrt-SDK-m原创 2015-04-16 17:22:38 · 1293 阅读 · 0 评论 -
kernel Makefile
# Makefile# LINUXDIR = your kernel path# KERNELCC = your cross compile# PARALLEL_BUILD = your cpu kernel number# if ! grep -q "CONFIG_EMBEDDED_RAMDISK=y" $(LINUXDIR)/.config ; then \# $(MAKE) -C原创 2015-04-29 14:18:17 · 1012 阅读 · 0 评论 -
svn命令
svn命令 通常都有帮助,可通过如下方式查询:$ svn help 知道了子命令,但是不知道子命令的用法,还可以查询:$ svn help add 开发人员常用命令(1) 导入项目$ cd ~/project$ mkdir -p svntest/{trunk,branches,tags}$ svn import svntest https:/转载 2015-04-27 17:46:29 · 572 阅读 · 0 评论 -
Wpa_supplicant.conf用法小结
Wpa_supplicant是linux系统下一个非常强大的无线网卡管理程序。google搜索到的它似乎不支持WPA2和AES,其实不然,参考它的文档可以发现,WPA2只是RSN的别名,而AES也是CCMP的一部分,所以它们的支持完全是没有问题的。它的文档看起来非常复杂,其实配置非常简单,下面先给出我的wpa_supplication.confctrl_interface=/var转载 2015-04-27 17:56:56 · 30353 阅读 · 0 评论 -
Openwrt无线管理工具/命令
查看连接Openwrt路由的无线客户端:iwinfo wlan0 assoclistiw dev wlan0 station dump查看分配的DHCP客户端IP:cat /tmp/dhcp.leases 扫描无线路由器/AP:iwinfo wlan0 scan查看Openwrt路由无线信息:iwinfo wlan0 infowlan0 ESSI转载 2015-05-09 11:38:00 · 13285 阅读 · 0 评论 -
cmake 例子3
学习一下cmake的 finder。finder是神马东西?当编译一个需要使用第三方库的软件时,我们需要知道:去哪儿找头文件 .h对比GCC的 -I 参数去哪儿找库文件 (.so/.dll/.lib/.dylib/...)对比GCC的 -L 参数需要链接的库文件的名字对比GCC的 -l转载 2015-10-28 15:08:43 · 431 阅读 · 0 评论 -
tasklet与workqueue的区别及底层实现区别
softirq和tasklet都属于软中断,tasklet是softirq的特殊实现;workqueue是普通的工作队列。1、softirq软中断支持SMP,同一个softirq可以在不同的CPU上同时运行,softirq必须是可重入的。软中断是在编译期间静态分配的,它不像tasklet那样能被动态的注册或去除。kernel/softirq.c中定义了一个包含32个softirq_ac转载 2015-11-19 14:28:19 · 8630 阅读 · 0 评论 -
各种同步锁的区别
这两天经常有同事在问spinlock和semaphore的相关问题,什么时候该用spinlock?什么时候该用semaphore?什么时候该用spinlock_irq?什么时候该用spinlock_irqsave?的确,对于初涉内核开发的人员来说,spinlock和semaphore的应用是一个比较大的疑问。这里,我来谈谈我对这两个概念的想法吧。Spinlock的实现机制可以描述如下:CPU首转载 2015-11-19 15:06:28 · 2618 阅读 · 0 评论 -
cmake 交叉编译
很多时候,我们在开发的时候是面对嵌入式平台,因此由于资源的限制需要用到相关的交叉编译。即在你host宿主机上要生成target目标机的程序。里面牵扯到相关头文件的切换和编译器的选择以及环境变量的改变等,我今天仅仅简单介绍下相关CMake在面对交叉编译的时候,需要做的一些准备工作。 CMake给交叉编译预留了一个很好的变量即CMAKE_TOOLCHAIN_FILE,它定义了一个文件的路转载 2017-02-07 09:02:52 · 583 阅读 · 0 评论 -
Wireshark命令行工具tshark使用小记
1、目的 写这篇博客的目的主要是为了方便查阅,使用wireshark可以分析数据包,可以通过编辑过滤表达式来达到对数据的分析;但我的需求是,怎么样把Data部分导出来,因为后续的工作主要针对数据包的Data部分,主要是对本地存储的.pcap文件进行解析。这时候就会使用到tshark命令行工具,可以通过命令提取自己想要的数据,可以重定向到文件,也可以结合上层语言比如Java,来调用命令行,转载 2017-02-09 17:23:20 · 1212 阅读 · 0 评论 -
route 命令解析
route命令用于显示和操作IP路由表。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是 为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设置为 Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永转载 2017-05-20 11:42:41 · 1558 阅读 · 0 评论 -
route 解析2
显示现在所有路由 #route -n root@Ubuntu:~# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.147.9.0 * 255.255.255.0 U 1 0 0 eth0 192.168.1.0 * 255.255转载 2017-05-20 11:43:40 · 711 阅读 · 0 评论 -
route 3
使用下面的 route 命令可以查看 Linux 内核路由表。[cpp] view plain copy # route Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.255.0 U 0 0转载 2017-05-20 12:12:33 · 470 阅读 · 0 评论 -
grub 恢复启动
一.概念BIOS:"Basic Input Output System",中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。MBR: “Master Boot Record” 硬转载 2017-06-24 16:09:39 · 739 阅读 · 0 评论 -
udev规则以及编写
主要内容:udev简介如何配置和使用udev如何编写udev规则字符串替换和匹配udev主要作用编写udev规则实例难点解析1. udev简介1.1 什么是udev?udev是Linux(linux2.6内核之后)默认的设备管理工具。udev 以守护进程的形式运行,通过侦听内核发出来的 uevent 来管理 /dev目录下的设备文件。如何理解udev是守护进转载 2017-09-06 11:15:15 · 1621 阅读 · 0 评论 -
对一个deb包的解压、修改、重新打包全过程方法
/********************************************************************* * Author : Samson * Date : 07/03/2014 * Test platform: * 3.11.0-12-generic #19-Ubuntu * GNU ba转载 2017-09-06 11:41:44 · 5876 阅读 · 0 评论 -
cmake rpath & Makefile rapth
商业程序如何加载自己的so 使用LD_LIBRARY_PATH的缺点是要实现设置LD_LIBRARY_PATH。不够自动化。那么大型的商业程序是如何加载自己的so呢。 这里以QtCreator为例。 QtCreator安装在/home/xxx/Qt5.3.1目录下。使用ldd查看qtcreator依赖的so。结果如下:xxx@ubuntu:~/Qt5.3.1/Tools/QtC转载 2017-02-06 18:23:13 · 5355 阅读 · 0 评论 -
手动编译ubuntu内核并升级内核
内核编译:(部分摘录自http://forum.ubuntu.org.cn/viewtopic.php?t=134404)1.到http://www.kernel.org下载需要编译的内核源码文件;2.安装有关编译程序。安装make ,gcc, make-kpkg,运行menuconfig等等和编译内核相关的工具。安装不了,请检查/etc/apt/sources.list 文件。有转载 2016-12-15 16:17:54 · 6726 阅读 · 0 评论 -
linux socket常用配置
设置套接字函数:#includeint setsockopt(int sockfd, int level, int optname, const void* optval, socklen_t* optlen);//sockfd要设置的目的套接字//level套接字的控制层次//optname optval optlen是三个相关的参数,通过不同的搭配可以设置不同的功能//1.数转载 2016-07-15 10:57:01 · 2734 阅读 · 0 评论 -
eclipse下使用动态库、静态库相应的配置
1.动态库: 一、创建动态链接库1、创建工程new->project->c++ project选择Shared Library->Empty Project.输入工程名a,点击finish,完成工程的创建。 2、编写代码在windows下封装动态链接库时对要封的函数要用__declspec(dllexport)来标明,在linux下不用,在linux下只需要直接把要封的函数的转载 2016-08-03 08:52:38 · 3895 阅读 · 0 评论 -
IO端口&IO内存
每个外设都是通过读写其寄存器来控制的。外设寄存器也称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三大类。根据访问外设寄存器的不同方式,可以把CPU分成两大类。一类CPU(如M68K,Power PC等)把这些寄存器看作内存的一部分,寄存器参与内存统一编址,访问寄存器就通过访问一般的内存指令进行,所以,这种CPU没有专门用于设备I/O的指令。这就是所谓的“I/O内存”方式。另一类C转载 2016-09-01 16:49:25 · 563 阅读 · 0 评论 -
PCI IO操作
以rtl8139d以太网卡驱动为例子可以很好的来学习、分析这个问题: 8139芯片中开始六个寄存器中存放的是网卡的mac地址,有多种方法可以得到。pci设备有三个空间分别为配置空间、io空间、内存空间,配置空间在开机时由bootloader设置、程序中一般用系统函数将一些配置信息读出来就可以了,很方便,没有必要直接操作。io空间和内存空间这两种模式都可以帮助我们得到mac的值,利转载 2016-09-01 18:00:18 · 3395 阅读 · 0 评论 -
pci_alloc_consistent 配合mmap
有这种需求的同行自然明白这2个为什么需要配合起来用。简单说说,我的需求是dma位于pci设备侧,pci主的cpu上应用程序直接mmap获取dma发来的数据。猜测显卡的dma一般位于pci主,所以我在内核里没有找到pci_alloc_consistent 配合mmap的例子。这个代码在loongson 3A这个极品芯片上都能通过,相信其他平台毫无障碍。pci_alloc_co转载 2016-09-03 16:16:48 · 6802 阅读 · 2 评论 -
bus, device, driver 三者之间的关系
1. 总线,设备和驱动总线:一个总线是处理器和一个或多个设备之间的通道. 为设备模型的目的, 所有的设备都通过一个总线连接, 甚至当它是一个内部的虚拟的,"平台"总线。设备:设备就是连接在总线上的物理实体。设备是有功能之分的。具有相同功能的设备被归到一个类(CLASS)中.在Linux 系统中,每个设备由一个 struct device 代表。驱动:驱动程序是在CPU运行时,提供操转载 2016-09-20 14:33:40 · 1188 阅读 · 0 评论 -
多线程死锁调试小技巧
据说再高的高手在写多线程程序的时候都难确保不会产生死锁,死锁的调试也就成为一个比较常见的问题,假设有下面这样一个问题: 一个正在生产环境下运行的进程死锁了,或者你只是在跑一个程序,并没有在调试器里面打开它,然后发现没有响应,日志输出也停止了。由于你是一个有经验的程序员,会想到“我刚刚加上了新的锁策略,不一定稳定,这可能是死锁了“。但是你不想就这么杀掉进程,因为多线程的 bug 不容易重现转载 2016-10-12 14:10:25 · 6014 阅读 · 1 评论 -
并发无锁队列UnlockQueue(单生产者单消费者kfifo)
一、UnlockQueue声明#ifndef _UNLOCK_QUEUE_H#define _UNLOCK_QUEUE_H class UnlockQueue{public: UnlockQueue(int nSize); virtual ~UnlockQueue(); bool Initialize(); unsigned int Put转载 2015-02-27 11:17:31 · 3102 阅读 · 2 评论