线程创建 pthread_create 中自定义参数注意事项

1. 函数原型
int pthread_create(pthread_t thread, const pthread_attr_t attr,
         void (start_routine) (void ), void arg);
本文主要讨论最后一个参数,同时传递多个的问题
(如果只传递一个 int char 等长度小于指针的数据类型,可以直接传,然后在线程内把 (void *) 强制转换)

2. 错误示例
是在一本书上看到的,也是写本文的初衷

线程创建错误参数传递示例

错误原因:

Read More

tftpd32 工具中的 dhcp tftp 使用说明

1. 下载 tftpd32 工具
点我下载(tftpd32_v4.5.2绿色版.zip)

2. 解压运行
tftpd32 运行

3. DHCP服务器配置
例如分配10段的网络

Read More

SecureCRT 配置 - Linux终端、颜色、透明效果

SecureCRT 安装好后,白底黑字,不透明,ls 没颜色,看起来相当不爽,先看下配置好后的效果吧 :)


Read More

文本编辑器/16进制编辑器 MadEdit 推荐

平时经常会查看16进制文件,有用 UltraEdit、NotePad++ 的,但是一直使用 MadEdit,简单、轻快、绿色,用起来很爽,所以才会有这篇文章。
我使用的是 MadEdit-Mod (MadEidt 的作者好像是国人,已经不更新了,MadEdit-Mod 修复了一些 bug,添加了一些新的功能),
下载地址:http://sourceforge.net/projects/madedit-mod/ 或者 http://download.csdn.net/detail/chinaeran/9172041

1. MadEdit 配置
因为是绿色版,需要手动加入右键菜单,方便操作要查看的文件,如下图:
MadEdit 配置

Read More

Linux fork 后 wait 获取子进程结束的状态示例

使用 fork 后,可能需要获取 fork 的进程的运行状况,比如有没有异常、崩溃。
wait 在 man 中关键的描述如下:
All of these system calls are used to wait for state changes in a child of the calling process, and obtain information about the child whose state has changed. A state change is considered to be: the child terminated; the child was stopped by a signal; or the child was resumed by a signal.

示例代码:

Read More

Linux 最简单内核模块 Hello World 示例

注:如果想要按照本篇实践,需要有能运行的arm开发板和对应版本的内核(如果想在Linux主机上编译运行,请参考附1)

1. 在相应版本内核的driver目录下新建如下文件:

module file tree

其中文件代码如下:
/* hello.c */

Read More

curl arm移植

curl

curl is a command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMTP, SMTPS, Telnet and TFTP. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, HTTP/2, cookies, user+password authentication (Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos), file transfer resume, proxy tunneling and more.

下载

http://curl.haxx.se/download/curl-7.41.0.tar.bz2
或者到这里:http://download.csdn.net/detail/chinaeran/8631829

编译

:此处使用 arm-linux-gnueabihf-gcc,—build 使用的是64位Linux,可以不添加此参数
解压后运行如下命令:

$ ./configure --host=arm-linux-gnueabihf --build=i686-pc-linux
$ make

目标路径:./lib/.libs/libcurl.so.4.3.0

jsoncpp linux平台编译和 arm移植

jsoncpp

soncpp is an implementation of a JSON (http://json.org ) reader and writer in C++. JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate.

下载

http://sourceforge.net/projects/jsoncpp/
或者到这里:http://download.csdn.net/detail/chinaeran/8631141

Linux平台编译

解压后运行如下命令:

# 先安装 scons
$ sudo apt-get install scons
$ scons platform=linux-gcc

目标路径:
动态库:./libs/linux-gcc-4.8/libjson_linux-gcc-4.8_libmt.so
静态库:./libs/linux-gcc-4.8/libjson_linux-gcc-4.8_libmt.a

arm平台编译

:platform 没有包含 arm 平台,类似 linux-gcc,所以把源码提取出来,独立编译
解压后运行如下命令:

$ mkdir arm_jsoncpp
$ cp include/ arm_jsoncpp/ -r
$ cp src/lib_json/* arm_jsoncpp/
$ cd arm_jsoncpp/

# 编译静态库
$ arm-linux-gnueabihf-g++ -c *.cpp -I./include -fPIC
$ ar cr libjsoncpp.a *.o

# 编译动态库
$ arm-linux-gnueabihf-g++ -shared -fPIC *.cpp -I./include -o libjsoncpp.so

目标路径:
动态库:./arm_jsoncpp/libjsoncpp.so
静态库:./arm_jsoncpp/libjsoncpp.a

libpcap arm移植

libpcap

a portable C/C++ library for network traffic capture.

下载

http://www.tcpdump.org/#latest-release
或者到这里:http://download.csdn.net/detail/chinaeran/8631799

编译

:此处使用 arm-linux-gnueabihf-gcc,—build 使用的是64位Linux,可以不添加此参数
解压后运行如下命令:

$ ./configure --host=arm-linux-gnueabihf --build=i686-pc-linux

报错如下:
configure: error: pcap type not determined when cross-compiling; use —with-pcap=… follow 解决**方法:
将 configure 文件中的如下内容注释掉

# if test -z "$with_pcap" && test "$cross_compiling" = yes; then
#     as_fn_error $? "pcap type not determined when cross-compiling; use --with-pcap=..." "$LINENO" 5
# fi

继续

$ ./configure --host=arm-linux-gnueabihf --build=i686-pc-linux

报错
configure: error: Your operating system’s lex is insufficient to compile
libpcap. flex is a lex replacement that has many advantages, including
being able to compile libpcap. For more information, see
http://www.gnu.org/software/flex/flex.html .

安装flex

$ sudo apt-get install flex
$ ./configure --host=arm-linux-gnueabihf --build=i686-pc-linux
$ make

依然报错
make: yacc: Command not found

再安装byacc

$ sudo apt-get install byacc
$ make

终于成功啦!!!
目标路径:./.libs/libcconv.so.0.0.0

libini arm移植

libiconv

An INI file parser that can read, edit and create large INI files. Usable under Microsoft Windows, DOS, Linux, etc. Supported languages are C, C++, Visual Basic, Java, TCL, Perl, Python, etc (DLL and SWIG capable).

下载

http://sourceforge.net/projects/libini/files/libini/libini-1.1.10/
或者到这里:http://download.csdn.net/detail/chinaeran/8631153

编译

:此处使用 arm-linux-gnueabihf-gcc,—build 使用的是64位Linux,可以不添加此参数
解压后运行如下命令:

$ ./configure --host=arm-linux-gnueabihf --build=i686-pc-linux
$ make

目标路径:./src/.libs/libini.so.1.0.10