自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tanglinux

专注于Linux内核以及C/C++应用程序的开发

  • 博客(84)
  • 资源 (19)
  • 收藏
  • 关注

原创 Qt数据库访问类QSqlDatabase,阅读完它的源代码之后才恍然大悟,原来你是这样的类

Qt源码版本:5.13.0QSqlDatabase是数值类,一个QSqlDatabase实例代表一个数据库连接,但它的创建不是依靠自身的构造函数(QSqlDatabase()只会创建一个空的,无效的对象),而是依靠它的静态成员函数addDatabase来构建,它的返回值就是一个有效的QSqlDatabase对象(也就是一个数据库连接)。1、通过addDatabase函数创建QSqlDatabase对象QSqlDatabase addDatabase(const QString &.

2020-09-24 10:21:38 2416 3

原创 使用MSVC 2017静态编译qBittorrent

操作系统:Windows 7 SP1 64-bit编译器:MSVC 2017社区版(Community Edition)在Windows 7操作系统中使用MSVC 2017编译32位和64位的BT下载软件qBittorrent,详情可参考Compiling: MSVC 2017 (static linkage)(时间久了,网址可能会失效,参考本文一样可以成功编译)。本文只验证编译32位的qBittorrent的操作过程。操作过程如下:一、编译前准备1、下载所使用的软件以及依赖库(1.

2020-08-20 11:59:34 1813 2

原创 程序的本质之六根据实例简要说明链接脚本的语义

操作系统:CentOS Linux release 7.7.1908内核版本:3.10.0-1062.1.1.el7.x86_64运行平台:x86_64参考文献: https://sourceware.org/binutils/docs-2.27/ld/index.html通过执行$ gcc -m32 -Wl,--verbose tanglinux.c -o tanglinu...

2019-11-05 17:14:58 1719

原创 程序的本质之五Linux系统中静态库文件的构成

操作系统:CentOS Linux release 7.7.1908内核版本:3.10.0-1062.1.1.el7.x86_64运行平台:x86_64在Linux系统中,静态库的文件名多以.a结尾,它是一个或多个目标文件的集合。静态库文件以以下的数据结构来定义(/usr/include/ar.h):#define ARMAG "!<arch>\n" /* ...

2019-11-01 09:29:53 1165

原创 程序的本质之四ELF文件中与动态链接有关的section的定义

操作系统:CentOS Linux release 7.7.1908内核版本:3.10.0-1062.1.1.el7.x86_64运行平台:x86_64参考文献:http://refspecs.linuxfoundation.org/本文根据/usr/include/elf.h文件和程序编译的详细过程文中所述的tanglinux来分析可执行文件中与动态链接有关的section...

2019-10-28 16:50:33 1949

原创 程序的本质之三ELF文件中与符号(symbol)相关的section的定义

操作系统:CentOS Linux release 7.7.1908内核版本:3.10.0-1062.1.1.el7.x86_64运行平台:x86_64参考文献:http://refspecs.linuxfoundation.org/本文根据/usr/include/elf.h文件和程序编译的详细过程文中所述的tanglinux.c源码来分析可执行文件中与符号(symbol)...

2019-10-23 16:58:19 4221 2

原创 程序的本质之二ELF文件的文件头、section header和program header

操作系统:CentOS Linux release 7.7.1908内核版本:3.10.0-1062.1.1.el7.x86_64运行平台:x86_64参考文献:http://refspecs.linuxfoundation.org/本文根据/usr/include/elf.h文件和程序编译的详细过程文中所述的tanglinux来分析可执行文件的文件头、section hea...

2019-10-17 12:30:07 11963 5

原创 程序的本质之一程序编译的详细过程

操作系统:CentOS Linux release 7.7.1908内核版本:3.10.0-1062.1.1.el7.x86_64运行平台:x86_64为了在64位的操作系统中编译32位的应用程序,可能须要安装以下动态库:$ sudo yum install glibc.i686$ sudo yum install glibc-devel.i686$ sudo yum ...

2019-10-10 09:12:17 1343

原创 概述VFS文件对象

内核源码:linux-2.6.38.8.tar.bz2    目标平台:ARM体系结构     文件对象表示进程中已打开的文件,在内存中由open、creat和openat等系统调用创建,由close系统调用销毁。由于多个进程可以同时打开和操作同一文件,所以同一文件可能存在多个文件对象。文件对象在Linux内核中由struct  file结构体来表示,源代码如下所示:/* in

2018-01-17 11:56:22 1159

原创 概述sysfs文件系统

内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 sysfs是基于内存的文件系统,用于向用户空间导出内核对象并且能对其进行读写。 1、sysfs文件系统不支持特殊文件,只支持目录、普通文件(文本或二进制文件)和符号链接文件等三种类型,在内核中都使用struct sysfs_dirent结构体来表示,相当于其他文件系统在硬...

2017-12-29 17:17:19 1648

原创 Linux操作系统根文件系统的注册与挂载

内核源码:linux-2.6.38.8.tar.bz2    目标平台:ARM体系结构     在Linux内核中,根文件系统的注册和挂载是在系统启动过程中所调用的mnt_init函数中实现的。源代码如下所示:/* arch/arm/include/asm/cache.h */#define __read_mostly __attribute__((__section__(".d

2017-12-11 09:54:43 876

原创 详解sys_close

内核源码:linux-2.6.38.8.tar.bz2    目标平台:ARM体系结构     在Linux内核中,系统调用close的定义如下所示:/* fs/open.c */SYSCALL_DEFINE1(close, unsigned int, fd){ struct file * filp; struct files_struct *files = current

2017-12-04 11:20:47 3318

原创 详解sys_read和sys_write

内核源码:linux-2.6.38.8.tar.bz2目标平台:ARM体系结构 在Linux内核中,系统调用read和write的定义如下所示: /* arch/arm/include/asm/posix_types.h */#ifdef __GNUC__typedef long long __kernel_loff_t;#endif/* include/linux/t

2017-12-01 11:14:29 7167

原创 详解sys_open

内核源码:linux-2.6.38.8.tar.bz2目标平台:ARM体系结构 在Linux系统中,打开或创建文件大概有以下三种形式: 系统调用sys_creat仅仅是对sys_open函数的简单封装。只有当参数filename为相对路径时,参数dfd才有意义,表示文件filename存在于文件描述符dfd所表示的目录之下。当dfd的值为AT_FDCWD时,则表示该文件位于

2017-11-19 10:59:03 10137 1

原创 Linux内核使用ERR_PTR和PTR_ERR等函数来实现指针函数返回错误码

内核源码:linux-2.6.38.8.tar.bz2 在Linux内核中,一个返回指针的函数应该使用什么样的值来表示错误返回呢,很显然,使用一个空指针NULL是根本无法表示和区分各式各样的执行错误的,所以正确的作法就是要使用一组特定的指针来表示,并且还要将这些指针与内核统一使用的错误码建立起相应的关系。这组特定的指针不能再被当作有效地址来使用。目前Linux内核中统一使用的各式错误码

2017-09-22 17:51:59 2638

原创 Ubuntu操作系统“Failed to fetch”错误的解决方法

操作系统:Ubuntu 12.04 LTS 在Ubuntu操作系统中,使用apt-get命令安装所需的开发软件非常方便,但也有不少时候由于链接不上软件源而不能正常安装,于是很多人都会想到使用sudo apt-get update命令来更新软件源,而恰恰这时屋漏偏逢连夜雨,更新命令也不能正常工作,出现大量“Failed to fetch”的错误。 W: Failed to fet

2014-12-22 15:27:22 161405 23

原创 GNUMakefiles之Makefiles变量的使用

参考文献:The GNU Make Manual v0.70(可从http://download.csdn.net/detail/npy_lp/7544225 上下载) 因为Makefile文件是以文本文件的形式来编辑和保存的,所以这里所说的变量仅仅是用来代表一段文本形式的字符(这段字符也就是这个变量的值)而已。简单地说,就是为了Makefile文件语法的清晰和灵活,将一小段的文本(变量名

2014-09-08 04:36:35 3767

原创 GNUMakefiles之Makefiles的条件语句

熟悉makefiles之条件语句

2014-08-26 17:15:05 2024

原创 拯救无法启动的虚拟机文件.vmdk中的数据

虚拟机:VMwareWorkstation 8.0.2 build-591240     从事Linux开发的软件工程师几乎都使用过虚拟机软件,如VMware workstation,一般把虚拟机软件运行在微软的操作系统中,把Linux操作系统(如Ubuntu)运行在虚拟机软件中,这样就可以在一台主机上同时使用两个不同类型的操作系统,非常方便。    运行在虚拟机中的操作系统以.vmd

2012-06-23 20:11:21 35909 6

原创 Linux内核同步原语之per-cpu变量

避免对同一数据的并发访问(通常由中断、对称多处理器、内核抢占等引起)称为同步。  ——题记    内核源码:linux-2.6.38.8.tar.bz2    目标平台:ARM体系结构     当创建一个per-cpu变量时,系统中的每一个处理器都会拥有该变量的独有副本。由于每个处理器都是在自己的副本上工作,所以对per-cpu变量的访问几乎不需要加锁。    per-cp

2012-04-13 14:31:45 7795 2

原创 详解Linux内核红黑树算法的实现

开发平台:Ubuntu11.04    内核源码:linux-2.6.38.8.tar.bz2     关于二叉查找树的概念请参考博文《详解二叉查找树算法的实现》。    平衡二叉树(BalancedBinary Tree或Height-Balanced Tree)又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之

2012-04-11 17:02:26 32953 9

原创 算法库之三:libcprops的交叉编译

开发平台:Ubuntu11.04    编 译 器:arm-gcc-4.1.1.tar.bz2(可从http://download.csdn.net/detail/npy_lp/3821111上下载);gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)    libcprops源码包:libcprops-0.1.12.tar.bz2 (可从官网

2012-04-08 13:46:20 3706

原创 算法库之二:libredblack的交叉编译

开发平台:Ubuntu11.04    编 译 器:arm-gcc-4.1.1.tar.bz2(可从http://download.csdn.net/detail/npy_lp/3821111上下载);gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)    libredblack源码包:libredblack-1.3.tar.gz (可从官网

2012-04-07 19:37:16 3231

原创 详解二叉查找树算法的实现

参考文献: 《数据结构(C语言版)》  严蔚敏 吴伟民 编著     开发平台:Ubuntu11.04    编译器:gcc version4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)     树(Tree)是n(n≥0)个结点的有限集。在任意一棵非空树中:(1)有且仅有一个特定的被称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0

2012-04-06 13:32:06 71430 20

原创 Linux进程管理之进程的终止

内核源码:linux-2.6.38.8.tar.bz2    目标平台:ARM体系结构     进程终止时,一般是调用exit库函数(无论是程序员显式调用还是编译器自动地把exit库函数插入到main函数的最后一条语句之后)来释放进程所拥有的资源。 $ man 3 exit void exit(int status);$ man 2 exit_group

2012-04-03 13:44:00 12886

原创 Linux内核的通知链机制

内核源码:linux-2.6.38.8.tar.bz2     在Linux内核中,通知链是一种非常好的异步通信机制,它的实现也非常简单,就是通过某个单循环链表来实现。    1、通知链实例都使用notifier_block结构体来表示 /* linux-2.6.38.8/include/linux/notifier.h */struct notifier_block { in

2012-03-31 13:30:26 6739

原创 Linux进程管理之执行新的程序

内核源码:linux-2.6.38.8.tar.bz2    目标平台:ARM体系结构     无论是在Ubuntu的伪终端(Terminal软件)还是在实终端(如通过串口访问开发板时),无论是直接执行./program命令还是使用shell脚本,它们的实现原理都是当前的shell程序(如bash)首先fork一个子进程,然后子进程调用execve系统调用来完成一个程序的执行(执行pr

2012-03-30 22:21:04 5444

原创 Linux进程管理之内核线程

内核源码:linux-2.6.38.8.tar.bz2    目标平台:ARM体系结构     在Linux系统中,进程和线程都使用task_struct结构体来表示,线程只不过是一种特殊(所谓的特殊也不过是在被创建时使用不同的clone标志组合而已)的进程罢了。    内核线程只运行在内核态,只能使用大于PAGE_OFFSET的线性地址空间。    1、进程0    在L

2012-03-29 21:57:08 7499

原创 Linux进程管理之进程的创建

开发平台:Ubuntu 11.04    内核源码:linux-2.6.38.8.tar.bz2    目标平台:ARM体系结构     在Linux应用程序的开发中,可以通过fork、vfork和clone等系统调用来创建一个子进程,它们在Linux内核中的入口点分别为sys_fork、sys_vfork和sys_clone函数。 /* linux-2.6.38.8/arch

2012-03-29 10:47:43 6120

原创 Linux内核中的PID散列表实例

开发平台:基于虚拟机的Ubuntu 11.04    内核源码:linux-2.6.38.8.tar.bz2    目标平台:ARM体系结构    参考文献:《深入Linux内核架构》      关于散列表的概念可以参考博文《散列表的基本概念及其运算》。    1、PID散列表    PID散列表是在系统启动过程中通过pidhash_init函数(被start_kern

2012-03-27 12:25:59 8586 1

原创 散列表的基本概念及其运算

参考文献: 《数据结构(C语言版)》  严蔚敏 吴伟民 编著     开发平台:Ubuntu11.04    编译器:gcc version4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)     散列表(也叫哈希表)是一种查找算法,与链表、树等算法不同的是,散列表算法在查找时不需要进行一系列和关键字(关键字是数据元素中某个数据项的值,用以标识一个数据元素)

2012-03-26 08:56:48 26654 2

原创 算法库之一:libhashish的交叉编译

开发平台:Ubuntu11.04    编 译器:arm-gcc-4.1.1.tar.bz2 (可从http://download.csdn.net/detail/npy_lp/3821111上下载);gcc version 4.5.2(Ubuntu/Linaro 4.5.2-8ubuntu4)    libhashish源码包:libhashish.tar.gz (可从http://so

2012-03-23 17:13:22 2989

原创 Linux进程管理之task_struct结构体(下)

9、进程地址空间  struct mm_struct *mm, *active_mm;#ifdef CONFIG_COMPAT_BRK unsigned brk_randomized:1;#endif#if defined(SPLIT_RSS_COUNTING) struct task_rss_stat rss_stat;#endif    mm指向进程所拥有的内存

2012-03-09 09:00:47 14761 5

原创 Linux进程管理之task_struct结构体(上)

内核源码:linux-2.6.38.8.tar.bz2    目标平台:ARM体系结构     进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。    Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这

2012-03-09 08:41:00 48712 6

原创 Linux内核同步原语之原子操作

避免对同一数据的并发访问(通常由中断、对称多处理器、内核抢占等引起)称为同步。  ——题记    内核源码:linux-2.6.38.8.tar.bz2    目标平台:ARM体系结构     原子操作确保对同一数据的“读取-修改-写入”操作在它的执行期间不会被打断,要么全部执行完成,要么根本不会执行。例如在ARM上对全局变量的++运算至少要经历以下三步:  ldr r3,

2012-03-04 15:40:25 14120

原创 详解Linux内核双向循环链表算法的实现(下)

2、双向链表在Linux内核中的实现    Linux内核对双向循环链表的设计非常巧妙,链表的所有运算都基于只有两个指针域的list_head结构体来进行。 /* linux-2.6.38.8/include/linux/types.h */struct list_head { struct list_head *next, *prev;};    链表的运算(源代码都在linu

2012-02-27 19:02:42 5875 2

原创 详解Linux内核双向循环链表算法的实现(上)

开发平台:Ubuntu11.04    编译器:gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)    内核源码:linux-2.6.38.8.tar.bz2     据我们所知,单链表只有一个指向其直接后继的指针域,而且只能从某个结点出发顺着指针域往后寻查其他结点。若要寻查结点的直接前趋,则需要从头指针重新开始。为了克服单链表这种单

2012-02-27 18:44:29 4613

原创 例解单链表的基本运算(下)

(3)、插入    单链表的插入运算最主要的操作是获得插入结点,例子代码通过多分支选择结构同时支持按序号查找和按值查找。     参考代码如下: #define FIND_BY_NUM 0#define FIND_BY_KEY 1void insert_node_with_headnode(list_node_p head, list_node_p tmp, unsig

2012-02-25 21:24:37 1470

原创 例解单链表的基本运算(上)

本文所有代码采用C语言实现。    参考文献: 《数据结构(C语言版)》  严蔚敏 吴伟民 编著     开发平台:Ubuntu 11.04    编译器:gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)     线性结构:在数据元素的非空有限集中,有且仅有一个开始结点(没有直接前趋)和一个终止结点(没有直接后继),除开始结点和终

2012-02-25 17:40:32 2009

原创 网络驱动移植之sk_buff结构体及其相关操作函数(下)

2、结构体相关操作函数    (1)、dev_alloc_skb    实际上,函数dev_alloc_skb最终是调用__alloc_skb函数来分配数据缓冲区和sk_buff结构体的,如下图:     从dev_alloc_skb到__alloc_skb所涉及的源代码如下: /* linux-2.6.38.8/net/core/skbuff.c */struct sk_b

2012-02-16 22:30:58 7174

qBittorrent.zip

编译qBittorrent所需的源代码,包括boost_1_71_0.zip、libtorrent-rasterbar-1.2.2.tar.gz、openssl-1.1.1d.tar.gz、qbittorrent-4.2.5.tar.gz、qt-everywhere-src-5.13.2.zip和zlib-1.2.11.tar.gz。

2020-09-10

TR2011-688.pdf

Exploiting the Hard-Working DWARF: Trojan and Exploit Techniques Without Native Executable Code

2019-11-26

vlc-2.2.8-win32.zip

vlc-2.2.8免安装软件,包含播发程序vlc.exe,核心库libvlc.dll,libvlccore.dll,以及所有相关插件、语言文件包等等,适用于win32平台,使用NSIS软件即可制作成完整的安装程序。 CRC32: 8BF6D4F7 MD5: A0B9F964374AA9351577E067566D38FD SHA-1: D4C65B8CC522031CCBC6917BF04ECD63D366D901 SHA-256: 8767A8BED8BA8863508A1F9BF20CB067D7F441936617CE3D86DE4C99706A9FCD

2018-04-18

4.4BSD Lite

内含TCP/IP详解卷2源代码

2017-04-03

net-snmp源码包

net-snmp-5.4.2.1.tar.gz

2014-12-23

The GNU Make Manual v0.70

for GNU make version 3.81

2014-06-24

iputils-s20121221.tar.bz2

The iputils package is set of small useful utilities for Linux networking. It was originally maintained by Alexey Kuznetsov. http://www.skbuff.net/iputils/

2013-03-08

net-tools-1.60.tar.bz2

包含常用的网络工具,如ifconfig、netstat、route、arp等等。

2012-11-30

u-boot和Linux内核镜像以及制作好的文件系统

博文《制作文件系统之五:基于BusyBox的默认配置来构建文件系统》所用的u-boot和Linux内核镜像(适用于优龙FS2410)以及制作好的文件系统(适用于ARM体系结构)。

2011-12-07

fontconfig-2.4.2.tar.gz

fontconfig-2.4.2.tar.gz,包含它所依赖的库expat-2.0.0.tar.gz。

2011-11-23

popt-1.7.tar.gz

popt源码包popt-1.7.tar.gz。

2011-11-23

libusb源码包

包含libusb-0.1.12.tar.gz和usbutils-0.72.tar.gz。

2011-11-22

tiff源码包

包含tiff-3.8.2.tar.gz和tiff-3.7.4.tar.gz,使用tiff-3.8.2.tar.gz中的libtool-1.5.20即可在Ubuntu上成功交叉编译tiff-3.8.2。

2011-11-22

freetype源码包

包含freetype-2.3.2.tar.bz2和freetype-1.3.1.tar.gz。

2011-11-22

libpng-1.2.16.tar.bz2

libpng-1.2.16.tar.bz2

2011-11-22

libjpeg源码包

包含libtool-2.2.4.tar.bz2和jpegsrc.v6b.tar.gz。

2011-11-22

zlib库,包含最新的1.2.5版本

包含zlib-1.2.3.tar.bz2和zlib-1.2.5.tar.gz。

2011-11-22

基于ARM的GCC编译器

基于ARM的GCC编译器,版本4.1.1,已包含常用库。

2011-11-21

最新yaffs2源码包

实测支持linux-2.6.38.8,运行良好。

2011-11-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除