自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 资源 (18)
  • 收藏
  • 关注

原创 内核与用户态程序共享内存的方法

一、首先获取一块物理上连续的物理内存有多种方法。(a)通过kernel命令行参数预留一些内存这种方法,适合于需要大块的物理连续的内存。假设物理内存总量为256M。命令行参数中,指定 mem=224M。即只让内核使用前224M内存,忽略其余的内存。这样,我们就有了32M的内存可用,内存起始物理地址为224*1024*1024。在内核态,通过ioremap,就可以将此物理地址处

2015-03-17 18:35:43 9199

原创 Linux内核模块(驱动)编译详解

本文主要说说如何编译自己开发的内核模块。由于驱动通常也被编译成内核模块,因此文章的内容也适用于驱动的编译。由于在下能力相当有限,有不当之处,还望大家批评指正^_^一、准备工作准备工作如何做,这里就不详说了。a) 首先,你要有一台PC(这不废话么^_^),装好了Linux。b) 安装好GCC(这个指的是host gcc,用于编译生成运行于pc机程序的)、m

2015-03-08 15:50:37 23545 6

原创 Linux内核编译详解

学习了网上的一些资料,自己试着摸索了一下,整理出此文。由于在下水平相当有限,不当之处,还望大家批评指正^_^重要的参考资料有:http://raspberrypi.stackexchange.com/questions/192/how-do-i-cross-compile-the-kernel-on-a-ubuntu-hosthttp://blog.csdn.net/x

2015-03-08 12:43:54 53166 5

原创 一个软件实现的Linux看门狗—soft_wdt

soft_wdt(以下简称本软件)是一个软件实现的Linux看门狗。    本软件是一款开源、免费软件。    下载地址:https://github.com/sunmingbao/soft-wdt/archive/master.zip    本软件和/drivers/watchdog/softdog.c实现的软件看门狗几乎一样。    主要的不同点是,前者

2014-11-04 08:23:44 6061

原创 Linux下获取虚拟地址对应的物理地址的方法

首先摘录如下URL对pagemap的描述。https://www.kernel.org/doc/Documentation/vm/pagemap.txt * /proc/pid/pagemap.  This file lets a userspace process find out which   physical frame each virtual page is map

2014-08-31 09:07:04 17567 10

原创 经典数独游戏+数独求解器—纯C语言实现

“心常乐数独小游戏”(以下简称“本软件”)是一款windows平台下的数独游戏软件。本软件是开源、免费软件。本软件使用纯C语言编写,MinGW编译,NSIS打包。本软件主要特性如下:支持“闯关模式”和“选关模式”支持“随机生成游戏”支持数独游戏提示支持用户对单元格做标记提供超级工具“数独求解器”支持“进度存档”支持“当前进度保存为迷题”及“将

2014-04-22 09:14:17 7719 1

原创 一个简单的Linux C程序开发框架—linux-dev-framework

Linux-dev-framework(以下简称本软件)是一个简单的Linux C程序开发框架,基于C语言和gcc工具链。 本软件内含一份简单的源码目录结构、一些实用的C例程和一套makefile编译脚本。用户可以以本软件为基础,快速开始自己的Linux C程序开发。使用此框架,在框架中新增程序及库,也无需修改makefile。本软件是开源、免费软件。本

2014-03-29 14:33:29 9711 4

原创 闲话字符编码

C源文件本身是普通的文本文件,既然是文本文件,那他就有自己的字符编码格式。我们常用的大概是GBK、UTF-8这两种格式。如果一个utf-8格式的文本文件,是用微软的记事本程序创建的,那么这个文件的开头会有3个字节的UTF-8签名(EF BB BF),也叫做BOM。BOM是个可选的东东,因此不是所有编辑器程序都会在文件前面加上这东东。有些程序不识别BOM,把他当正常字符数据处理,

2013-12-23 14:30:17 1035

原创 字节序详解

1. 首先建立如下的物理内存概念(独立于字节序)如下面的图-1所示,内存中有连续的4个字节,左边是低地址,右边是高地址。我们这里假设4个字节的地址分别是0,1,2,3。低地址                                                      高地址|0                                

2013-11-27 12:58:14 1634

原创 Linux协议栈代码阅读笔记(一)

Linux协议栈代码阅读笔记(一)(基于linux-2.6.21.7)(一)用户态通过诸如下面的C库函数访问协议栈服务int socket(int domain, int type, int protocol);int bind(int sockfd, const struct sockaddr *addr,  socklen_t addrlen);int connect(in

2013-09-26 23:08:00 2602

原创 嵌入式开发学习路线——写给初入门的同仁

一般的应用开发,例如桌面应用的开发,移动应用的开发,通常都是在一个IDE集成开发环境中完成。开发者,熟悉了IDE的使用,熟悉了相关应用编程接口API,就能开发应用了。不需要关心系统本身的太多东西。(当然,这并不是说,一般的应用开发,不需要了解很多的系统知识。如果开发者具有深厚的系统知识,那当然对于应用开发大有帮助)。而嵌入式开发却有所不同,他相当于是做系统集成。开发者可能需要自己确

2011-12-24 21:35:26 35401 12

原创 七条原则实现简单的代码设计

1.  命名(变量名,参数名,函数名,也包括文件名)应当体现概念含义, 应当准确表达事物本质, 且恰如其分。 2.  涉及到计算(包括算术、逻辑、控制等等)的地方,如果这组运算行为,与现实业务中某个概念对应,则建议封装成一个函数。 3. 如果一个函数,体现的是现实业务中的一个大概念,但是其内部有若干个代码块,每个代码块体现了一个更细粒度的小概念,     则建议将这些代码块抽取

2011-12-23 01:00:06 2447 2

原创 采用隔离法消除冠状病毒传播的源码实现(C语言)

近期针对新型冠状病毒的肆虐,我国各地都实施了严厉的疫情防控措施。而全民大隔离可以说是对付疫情的关键手段。身为一名小码农,本人在将自己隔离在家的日子里,脑海中很自然的就涌现出了“用隔离法终止冠状病毒传播”的代码实现。void terminate_coronavirus_spread(void){ uint64_t infected_num_last_day; u...

2020-02-08 16:13:37 1324

原创 calc——一个简单的Linux命令行环境计算器

在下整了一个开源的小程序——calc。项目URL:https://github.com/sunmingbao/calc 运行效果如下(某些运算符用引号括住,是为了避免被shell当作特殊字符处理):[root@localhost ~]# calc 1 + -3-2[root@localhost ~]# calc 1 "<<" 101024[root@loca...

2018-08-14 01:05:51 5547

原创 Linux内核rootfs的初始化过程

由于在下水平相当有限,不当之处,还望大家批评指正^_^在Linux  shell中执行mount命令,通常可以看到某个做了文件系统的磁盘分区或flash分区或内存文件系统做为所谓的根文件系统被mount到了挂载点/处。实际上内核中最初始的根文件系统,并不是来自内核外部,他是由内核自己构建出来的。为了说明这个过程,我们先说说mount的过程。系统调用sys_mount是在fs/n

2018-01-27 01:30:42 2739

原创 Linux内核的启动流程

内核本身由一个作了raw_binary处理的目标文件(下文称为kernel.o)以及大量的在运动时可能被动态装载的内核模块构成。关于内核映像的构成,可以参考http://blog.csdn.net/crazycoder8848/article/details/19156503本文仅谈一谈内核的启动流程,基于3.10.102版本的内核源码。内核的启动流程,开始于kerne

2017-08-08 02:04:26 1156

原创 软件设计中的可移植性的考虑

由于在下水平相当有限,不当之处还望大家不吝赐教。参考Linux内核的思路,对应用程序的可移植性设计做出的思考。Linux内核中,最前期的启动代码是特定体系结构的代码,还有中断、异常、系统调用的前期都会进入特定体系结构的框架代码,然后再转入体系结构无关的代码。特定体系结构的代码,位于以体系结构名称命名的文件夹中。那么对于应用程序的设计,如何借鉴呢?以GUI程序为例。假如一

2017-05-22 00:39:41 5943

原创 表目管理代码示例(迸发访问,多重索引查找,添加,删除,)

由于在下水平相当有限,不当之处还望大家不吝赐教。程序设计中,常常会涉及到各种各样的表目的管理。如表目的添加,删除,查找等。其中,查找操作,有可能需要支持多种方式,例如,根据id查找,根据某个属性查找,或者根据多个属性进行查找等。另外,还需要妥善处理好迸发问题,又要兼顾效率。那么要如何设计表管理模块,才能实现这些目标呢?这里上一份代码,供大家参考。注意,完整的可运

2017-05-21 17:57:42 510

原创 Linux关机重启停机(shutdown reboot halt)流程分析

由于本人水平相当有限,不当之处还望大家多多指教。涉及的内核源码,基于linux-3.10.102。首先,对于用户态发起的这类操作请求,最终都是通过sys_reboot系统调用(源码在kernel/sys.c)实现的。其代码如下。如其注释所言,他除了可以重启关机停机,还可以修改ctrl-alt-del组合键的含义。另外,注释还说到此系统调用不会做sync。即sync需要用户在调用此系

2017-05-14 17:22:43 5805

原创 关于Linux文件系统的几点注意事项

本人水平相当有限,不当之处还望大家多多指教。做内核开发的朋友,可能对下面的代码都很眼熟。static const struct file_operations xxx_fops = { .owner = THIS_MODULE, .llseek = no_llseek, .write = xxx_write, .unlocked_ioctl = xxx_ioctl, .

2017-05-14 05:20:24 741

原创 raw binary文件探秘

Linux下的目标文件、动态库文件、可执行文件,其格式为elf格式。elf文件是有结构的文件,其内部有丰富的信息,例如,可能包含了可执行文件的入口地址,各个节的起始地址,可重定位信息,还可能包含指令与代码行的对应关系(用于调试)。内核则利用elf文件中的相关信息,加载运行可执行文件。然而内核映像,u-boot映像这些特殊的文件,则是raw_binary文件。这当然有他的原因。以u-

2017-04-25 23:57:08 3712

原创 超简单!!centos 6离线源码编译安装升级gcc、binutils、automake、autoconf

centos 6系列的Linux发行版,是非常成功(具足UNIX精神)的发行版,可能大家都已经用得非常习惯了。但问题是,其内核及附带的工具软件,版本却都非常老了。centos 7上的软件版本虽然比较新,但centos 7设计风格的突变(主要是引入了很不符合UNIX精神的systemd),可能在业界也引起了不少争议。而我们苦逼的开发者,可能面临既需要使用高版本的相关组件,又不想升级到ce

2016-12-23 21:05:53 11096 1

原创 程序设计的兼容性问题杂谈

程序的实现,经常会随着时间的推移不断的变化。不断变化的实现,经常又需要兼容以前的实现。本文试图在这方面做一些探讨。由于在下水平相当有限,不当之处,在所难免。还望大家多多指教。所谓兼容,指的是新版本的软件能够原封不动的接纳旧版本的配置文件、命令行参数、程序间交互消息、函数接口调用等。下面分几个方面来探讨。一、程序间交互消息的兼容性这

2016-12-14 00:08:24 2549

原创 DPDK开发杂记

注意,本文的示例是基于Linux x86_64环境。如果你的环境不一样,应当将文中的x86_64-native-linuxapp-gcc 换成实际的值。例如,32位linux环境,则换成i686-native-linuxapp-gccDPDK环境变量编译DPDK自带的应用程序,总是需要用到两个环境变量。可以在 ~/.bash_profile中追加如下两行内容。这

2016-08-11 08:08:54 7571

原创 Linux静态IP及DNS配置

以eth0为例,下面是其配置文件示例。主要是配置红色部分。[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0HWADDR=00:0C:29:A3:48:38TYPE=EthernetUUID=afeca381-c5c1-4dfe-9e8a-ec573dbd04f7ONB

2016-08-07 19:05:28 8328 2

原创 Win7操作系统调优

对于64位win7,2G内存的配置,按照这个方法调优后,用起来性能杠杠的。看看我的笔记本,在不开程序时某个时刻的截图。下面直接说优化项:关闭 防火墙(你要说这不安全,那你就开着好了)disable不必要的开机启动项(可以通过360安全卫士完成)停止资源占用高且不太必要的服务:windows update、windows defender、windows fire

2016-08-07 00:04:54 658

原创 Linux内核协议栈IP报文的上送转发及下发

这里主要分析在网络功能简单配置,且报文正常的情况下,报文的处理过程。网卡接收到IP报文,经过一些执行路径后,最终进入ip_rcv做处理。 ip_rcv在网络功能简单配置,且报文正常的情况下,就是简单的通过ip_rcv_finish完成后续的全部处理工作。ip_rcv_finish通过查找路由,为此报文找到一个dst_entry,然后即由skb_dst(skb)->input(skb);

2016-07-21 16:29:30 4938

原创 Linux网卡驱动代码阅读杂记

RealTek 8169/8168/8101的驱动代码,一共就一个文件(drivers/net/r8169.c),而且总代码行也就5千行左右,很适合新手入门学习。而像intel e1000e的驱动,包含了较多的文件(总入口文件:drivers/net/e1000e/netdev.c),总代码行至少在1万行以上。先来看看r8169的相关代码:rtl8169_open中,用dma_

2016-07-19 15:47:32 4428

原创 grep使用杂记

grep有如下一些选项,-m指定输出多少个匹配-n则会将行号也输出-A指定将匹配行后的多少行也输出-B指定将匹配行前的多少行也输出看下面的例子。输出了行号。行号后面跟':'表示是匹配行。跟'-'表示是非匹配行。[root@localhost ~]# cat a_file.sh | grep eth1 -m 2 -n -A 319:echo ifconfig eth

2016-07-12 08:43:55 450

原创 samba服务器的配置

1. 关闭selinux。通过修改/etc/selinux/config实现将  SELINUX=enforcing  改为   SELINUX=disabled2. 关闭linux防火墙,并阻止其开机自启。service iptables stopchkconfig iptables off3. 创建samba账号 root通过如下命令,创建root账

2016-07-11 16:18:18 1156

原创 Linux proc文件系统杂记

一、cpu占用率相关1. 系统总体cpu占用/proc/stat示例输出:[root@test]# cat /proc/stat cpu 166709 34158 278899 243448347 302989 0 345 0 0 0cpu0 84510 17883 137112 121703575 152650 0 304 0 0 0cpu1 82199 16274

2016-06-02 18:19:42 600

原创 C程序的基础系统代码

一、简单C程序的构建过程:[root@test]# gcc -v  hello.c //首先是gcc搜集系统信息Using built-in specs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/lto-wrapperTarget: x86_64-redhat-

2016-05-31 10:00:02 699

原创 Bourne Shell编程杂记

首先强调一下,Bourne Shell数据类型的概念极简单:一切变量的值,都是字符串。所以,也可以认为,Bourne Shell只有一种基本数据类型,那就是字符串。由于数据类型太简单,所以脚本中若要进行各种数学运算,只能借助其他程序(例如,expr程序)来完成。其他程序计算出的结果,在脚本中仍然保存为一个字符串。脚本第一行固定为如下内容#!/bin/sh他表示这是一

2016-05-25 10:12:28 902

原创 利用libbfd获取elf可执行文件的section(节)及symbol(符号)信息

一. 安装bfd库libbfd(Binary File Descriptor library是binutils中附带的一个C库。从 http://ftp.gnu.org/gnu/binutils 下载binutils。我们这里下载binutils-2.23.2.tar.gz下载后,解压安装libbfd。方法如下:tar -xzf binutils-2.23.2.tar.gz

2016-05-19 19:46:24 7803

原创 C语言与ELF机器语言之间的关系

C语言对机器模型的抽象层次,恰到好处。C语言使得开发者,刚好从最底层的费力低效的汇编编程中解脱出来,而又没有进一步往上层做抽象。这样一来既大大提高了开发效率,又不失对程序行为的精确控制能力,还使程序获得了良好的可移植性。可谓一举三得。同时,基本C库的理念,也是只做确定正确的事。他所提供的,大体都是最小粒度的几乎不会有变数的基础例程。不过,本文是要谈一谈C源码与ELF之间的一些联

2016-05-18 18:22:52 1365

原创 Linux下进程的退出

注意,本文说的是整个进程(一个进程可能包含多个线程)的退出。一个进程的退出,有可能是由进程自己的用户态代码主动退出的,也可能是由内核通过信号处理机制(如SIGKILL、SIGABRT)强制执行的。一、用户态主动退出有如下多种途径,直接main函数返回,调用exit调用_exit调用exit_group上面几种情况,前两者等价(All functions regi

2016-05-06 17:10:34 1302

原创 Linux中断处理杂记

1.  irq_desc数组kernel/irq/irqdesc.cstruct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = {[0 ... NR_IRQS-1] = {.handle_irq = handle_bad_irq,.depth = 1,.lock = __RAW_SPIN_LOCK_U

2016-04-29 18:00:48 575

原创 C语言编程常用数值计算的高性能实现

本篇介绍一组非常简单却又很常用的数值计算的宏实现。本篇所提到的数值计算问题,相信C语言初学者都能做得出来,但是本篇中给出的例子实现却更注重效率。这些例子实现的最大特点是,消除了逻辑跳转。这样做的好处是避免了分支预测的风险,或者换句话说,可以更好地发挥处理器流水线的性能。由于本篇的问题都很简单,笔者就废话少说,直接看例子了。/* 高位全0,低N位全1 */#define Low_N_B

2016-04-23 16:55:15 4037

原创 Linux内核中的初始化initcall

由于在下水平相当有限,不当之处,还望大家批评指正^_^基于Linux 2.6.32include\asm-generic\Vmlinux.lds.h中有如下定义:这等于是安排了名称如.initcall[s].init的一系列section的顺序,level越小,越靠前。符号__initcall_start记录了这片区域的开始,__initcall_end符号记录了这

2016-03-10 15:49:28 3650

原创 Linux设备与驱动学习笔记(概述)

由于在下能力相当有限,有不当之处,还望大家批评指正^_^本文基于Linux内核2.6.32一、宏观架构在内核中,大量的驱动与设备(但不是全部),都按总线进行分类管理。例如,凡是pci设备或pci设备的驱动,都归到pci总线下管理。1. 从sys文件系统感受这种架构。/sys/bus/目录下列出了各种总线类型,像pci、i2c、usb、platform等。我们以p

2016-03-09 19:06:58 7048

unix环境高级编程第二版chm

unix环境 高级编程,第二版, chm格式

2017-06-28

C程序设计语言(The C programming Language)-英文版-第二版-chm格式

超级经典的C语言书籍,言简意赅。

2017-03-09

cpu信息检测工具cpuid

一个软件工具,用于检测cpu信息

2016-10-28

TCPIP详解(卷一)chm格式

TCPIP详解-TCPIP.Illustrated Volume 1

2016-10-26

深入理解计算机系统.pdf

深入理解计算机系统,超好的系统编程学习资料。

2016-10-15

GNU-make-v3.81.pdf

gnu make使用手册英文版

2016-10-11

gcc_manual_4.8.5.pdf

gcc manual

2016-10-11

UNIX Network Programming Volume.1.3rd.Ed.chm

UNIX Network Programming

2016-10-11

UNIX Shells by Example-Fourth Edition-chm格式

shell编程资料

2016-10-11

超级棒的gnu autotools学习资料《Using GNU Autotools》

超级棒的gnu autotools学习资料,内容简明易懂。

2015-12-26

超级棒的gnu autools学习资料《Using GNU Autotools》

超级棒的gnu autools学习资料,文字精简,超级易懂。

2015-12-25

LightTPD for windows安装包

LightTPD for windows。

2014-11-18

小兵以太网测试仪源码

小兵以太网测试仪源码。纯C语言写的windows程序。

2013-11-16

xb_ether_tester_source_2.3.0.zip

小兵以太网测试仪的源码。纯C语言实现的windows程序。

2013-11-15

纯C语言写的windows程序

纯C语言写出的windows小程序,没有使用任何集成开发环境。编程此程序,需要使用mingw工具链。

2013-08-04

简单的数独小游戏

codeblocks+MinGW+wxWidgets实现的数独小游戏。

2013-06-11

超简单的数独游戏

codeblocks+MinGW+wxWidgets实现的数独小游戏。

2013-06-11

一份简单的makefile示例

一份简单的makefile示例,演示了如果通过makefile构建静态库、动态库及可执行程序。

2012-11-07

空空如也

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

TA关注的人

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