- 博客(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 2659 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 1949 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 1904
原创 程序的本质之五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 1255
原创 程序的本质之四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 2083
原创 程序的本质之三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 4543 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 12827 6
原创 程序的本质之一程序编译的详细过程
操作系统: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 1421
原创 概述VFS文件对象
内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 文件对象表示进程中已打开的文件,在内存中由open、creat和openat等系统调用创建,由close系统调用销毁。由于多个进程可以同时打开和操作同一文件,所以同一文件可能存在多个文件对象。文件对象在Linux内核中由struct file结构体来表示,源代码如下所示:/* in
2018-01-17 11:56:22 1218
原创 概述sysfs文件系统
内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 sysfs是基于内存的文件系统,用于向用户空间导出内核对象并且能对其进行读写。 1、sysfs文件系统不支持特殊文件,只支持目录、普通文件(文本或二进制文件)和符号链接文件等三种类型,在内核中都使用struct sysfs_dirent结构体来表示,相当于其他文件系统在硬...
2017-12-29 17:17:19 1712
原创 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 935
原创 详解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 3389
原创 详解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 7307
原创 详解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 10473 1
原创 Linux内核使用ERR_PTR和PTR_ERR等函数来实现指针函数返回错误码
内核源码:linux-2.6.38.8.tar.bz2 在Linux内核中,一个返回指针的函数应该使用什么样的值来表示错误返回呢,很显然,使用一个空指针NULL是根本无法表示和区分各式各样的执行错误的,所以正确的作法就是要使用一组特定的指针来表示,并且还要将这些指针与内核统一使用的错误码建立起相应的关系。这组特定的指针不能再被当作有效地址来使用。目前Linux内核中统一使用的各式错误码
2017-09-22 17:51:59 2691
原创 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 162247 24
原创 GNUMakefiles之Makefiles变量的使用
参考文献:The GNU Make Manual v0.70(可从http://download.csdn.net/detail/npy_lp/7544225 上下载) 因为Makefile文件是以文本文件的形式来编辑和保存的,所以这里所说的变量仅仅是用来代表一段文本形式的字符(这段字符也就是这个变量的值)而已。简单地说,就是为了Makefile文件语法的清晰和灵活,将一小段的文本(变量名
2014-09-08 04:36:35 3788
原创 拯救无法启动的虚拟机文件.vmdk中的数据
虚拟机:VMwareWorkstation 8.0.2 build-591240 从事Linux开发的软件工程师几乎都使用过虚拟机软件,如VMware workstation,一般把虚拟机软件运行在微软的操作系统中,把Linux操作系统(如Ubuntu)运行在虚拟机软件中,这样就可以在一台主机上同时使用两个不同类型的操作系统,非常方便。 运行在虚拟机中的操作系统以.vmd
2012-06-23 20:11:21 36040 6
原创 Linux内核同步原语之per-cpu变量
避免对同一数据的并发访问(通常由中断、对称多处理器、内核抢占等引起)称为同步。 ——题记 内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 当创建一个per-cpu变量时,系统中的每一个处理器都会拥有该变量的独有副本。由于每个处理器都是在自己的副本上工作,所以对per-cpu变量的访问几乎不需要加锁。 per-cp
2012-04-13 14:31:45 7833 2
原创 详解Linux内核红黑树算法的实现
开发平台:Ubuntu11.04 内核源码:linux-2.6.38.8.tar.bz2 关于二叉查找树的概念请参考博文《详解二叉查找树算法的实现》。 平衡二叉树(BalancedBinary Tree或Height-Balanced Tree)又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之
2012-04-11 17:02:26 33061 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 3757
原创 算法库之二: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 3264
原创 详解二叉查找树算法的实现
参考文献: 《数据结构(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 71487 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 13042
原创 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 6793
原创 Linux进程管理之执行新的程序
内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 无论是在Ubuntu的伪终端(Terminal软件)还是在实终端(如通过串口访问开发板时),无论是直接执行./program命令还是使用shell脚本,它们的实现原理都是当前的shell程序(如bash)首先fork一个子进程,然后子进程调用execve系统调用来完成一个程序的执行(执行pr
2012-03-30 22:21:04 5476
原创 Linux进程管理之内核线程
内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 在Linux系统中,进程和线程都使用task_struct结构体来表示,线程只不过是一种特殊(所谓的特殊也不过是在被创建时使用不同的clone标志组合而已)的进程罢了。 内核线程只运行在内核态,只能使用大于PAGE_OFFSET的线性地址空间。 1、进程0 在L
2012-03-29 21:57:08 7542
原创 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 6169
原创 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 8654 1
原创 散列表的基本概念及其运算
参考文献: 《数据结构(C语言版)》 严蔚敏 吴伟民 编著 开发平台:Ubuntu11.04 编译器:gcc version4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) 散列表(也叫哈希表)是一种查找算法,与链表、树等算法不同的是,散列表算法在查找时不需要进行一系列和关键字(关键字是数据元素中某个数据项的值,用以标识一个数据元素)
2012-03-26 08:56:48 26740 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 3028
原创 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 14846 5
原创 Linux进程管理之task_struct结构体(上)
内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。 Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这
2012-03-09 08:41:00 48807 6
原创 Linux内核同步原语之原子操作
避免对同一数据的并发访问(通常由中断、对称多处理器、内核抢占等引起)称为同步。 ——题记 内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 原子操作确保对同一数据的“读取-修改-写入”操作在它的执行期间不会被打断,要么全部执行完成,要么根本不会执行。例如在ARM上对全局变量的++运算至少要经历以下三步: ldr r3,
2012-03-04 15:40:25 14210
原创 详解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 5942 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 4650
原创 例解单链表的基本运算(下)
(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 1495
原创 例解单链表的基本运算(上)
本文所有代码采用C语言实现。 参考文献: 《数据结构(C语言版)》 严蔚敏 吴伟民 编著 开发平台:Ubuntu 11.04 编译器:gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) 线性结构:在数据元素的非空有限集中,有且仅有一个开始结点(没有直接前趋)和一个终止结点(没有直接后继),除开始结点和终
2012-02-25 17:40:32 2025
原创 网络驱动移植之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 7279
qBittorrent.zip
2020-09-10
TR2011-688.pdf
2019-11-26
vlc-2.2.8-win32.zip
2018-04-18
iputils-s20121221.tar.bz2
2013-03-08
u-boot和Linux内核镜像以及制作好的文件系统
2011-12-07
tiff源码包
2011-11-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人