- 博客(114)
- 资源 (18)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 内核与用户态程序共享内存的方法
一、首先获取一块物理上连续的物理内存有多种方法。(a)通过kernel命令行参数预留一些内存这种方法,适合于需要大块的物理连续的内存。假设物理内存总量为256M。命令行参数中,指定 mem=224M。即只让内核使用前224M内存,忽略其余的内存。这样,我们就有了32M的内存可用,内存起始物理地址为224*1024*1024。在内核态,通过ioremap,就可以将此物理地址处
2015-03-17 18:35:43
9279
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Linux内核模块(驱动)编译详解
本文主要说说如何编译自己开发的内核模块。由于驱动通常也被编译成内核模块,因此文章的内容也适用于驱动的编译。由于在下能力相当有限,有不当之处,还望大家批评指正^_^一、准备工作准备工作如何做,这里就不详说了。a) 首先,你要有一台PC(这不废话么^_^),装好了Linux。b) 安装好GCC(这个指的是host gcc,用于编译生成运行于pc机程序的)、m
2015-03-08 15:50:37
23678
6
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 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
53278
5
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 一个软件实现的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
6082
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 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
17620
10
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 经典数独游戏+数独求解器—纯C语言实现
“心常乐数独小游戏”(以下简称“本软件”)是一款windows平台下的数独游戏软件。本软件是开源、免费软件。本软件使用纯C语言编写,MinGW编译,NSIS打包。本软件主要特性如下:支持“闯关模式”和“选关模式”支持“随机生成游戏”支持数独游戏提示支持用户对单元格做标记提供超级工具“数独求解器”支持“进度存档”支持“当前进度保存为迷题”及“将
2014-04-22 09:14:17
7748
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 一个简单的Linux C程序开发框架—linux-dev-framework
Linux-dev-framework(以下简称本软件)是一个简单的Linux C程序开发框架,基于C语言和gcc工具链。 本软件内含一份简单的源码目录结构、一些实用的C例程和一套makefile编译脚本。用户可以以本软件为基础,快速开始自己的Linux C程序开发。使用此框架,在框架中新增程序及库,也无需修改makefile。本软件是开源、免费软件。本
2014-03-29 14:33:29
9832
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 闲话字符编码
C源文件本身是普通的文本文件,既然是文本文件,那他就有自己的字符编码格式。我们常用的大概是GBK、UTF-8这两种格式。如果一个utf-8格式的文本文件,是用微软的记事本程序创建的,那么这个文件的开头会有3个字节的UTF-8签名(EF BB BF),也叫做BOM。BOM是个可选的东东,因此不是所有编辑器程序都会在文件前面加上这东东。有些程序不识别BOM,把他当正常字符数据处理,
2013-12-23 14:30:17
1042
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 字节序详解
1. 首先建立如下的物理内存概念(独立于字节序)如下面的图-1所示,内存中有连续的4个字节,左边是低地址,右边是高地址。我们这里假设4个字节的地址分别是0,1,2,3。低地址 高地址|0
2013-11-27 12:58:14
1730
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 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
2617
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 嵌入式开发学习路线——写给初入门的同仁
一般的应用开发,例如桌面应用的开发,移动应用的开发,通常都是在一个IDE集成开发环境中完成。开发者,熟悉了IDE的使用,熟悉了相关应用编程接口API,就能开发应用了。不需要关心系统本身的太多东西。(当然,这并不是说,一般的应用开发,不需要了解很多的系统知识。如果开发者具有深厚的系统知识,那当然对于应用开发大有帮助)。而嵌入式开发却有所不同,他相当于是做系统集成。开发者可能需要自己确
2011-12-24 21:35:26
35503
12
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 七条原则实现简单的代码设计
1. 命名(变量名,参数名,函数名,也包括文件名)应当体现概念含义, 应当准确表达事物本质, 且恰如其分。 2. 涉及到计算(包括算术、逻辑、控制等等)的地方,如果这组运算行为,与现实业务中某个概念对应,则建议封装成一个函数。 3. 如果一个函数,体现的是现实业务中的一个大概念,但是其内部有若干个代码块,每个代码块体现了一个更细粒度的小概念, 则建议将这些代码块抽取
2011-12-23 01:00:06
2473
2
原创 采用隔离法消除冠状病毒传播的源码实现(C语言)
近期针对新型冠状病毒的肆虐,我国各地都实施了严厉的疫情防控措施。而全民大隔离可以说是对付疫情的关键手段。身为一名小码农,本人在将自己隔离在家的日子里,脑海中很自然的就涌现出了“用隔离法终止冠状病毒传播”的代码实现。void terminate_coronavirus_spread(void){ uint64_t infected_num_last_day; u...
2020-02-08 16:13:37
1370
原创 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
5625
原创 Linux内核rootfs的初始化过程
由于在下水平相当有限,不当之处,还望大家批评指正^_^在Linux shell中执行mount命令,通常可以看到某个做了文件系统的磁盘分区或flash分区或内存文件系统做为所谓的根文件系统被mount到了挂载点/处。实际上内核中最初始的根文件系统,并不是来自内核外部,他是由内核自己构建出来的。为了说明这个过程,我们先说说mount的过程。系统调用sys_mount是在fs/n
2018-01-27 01:30:42
2791
原创 Linux内核的启动流程
内核本身由一个作了raw_binary处理的目标文件(下文称为kernel.o)以及大量的在运动时可能被动态装载的内核模块构成。关于内核映像的构成,可以参考http://blog.csdn.net/crazycoder8848/article/details/19156503本文仅谈一谈内核的启动流程,基于3.10.102版本的内核源码。内核的启动流程,开始于kerne
2017-08-08 02:04:26
1166
原创 软件设计中的可移植性的考虑
由于在下水平相当有限,不当之处还望大家不吝赐教。参考Linux内核的思路,对应用程序的可移植性设计做出的思考。Linux内核中,最前期的启动代码是特定体系结构的代码,还有中断、异常、系统调用的前期都会进入特定体系结构的框架代码,然后再转入体系结构无关的代码。特定体系结构的代码,位于以体系结构名称命名的文件夹中。那么对于应用程序的设计,如何借鉴呢?以GUI程序为例。假如一
2017-05-22 00:39:41
5979
原创 表目管理代码示例(迸发访问,多重索引查找,添加,删除,)
由于在下水平相当有限,不当之处还望大家不吝赐教。程序设计中,常常会涉及到各种各样的表目的管理。如表目的添加,删除,查找等。其中,查找操作,有可能需要支持多种方式,例如,根据id查找,根据某个属性查找,或者根据多个属性进行查找等。另外,还需要妥善处理好迸发问题,又要兼顾效率。那么要如何设计表管理模块,才能实现这些目标呢?这里上一份代码,供大家参考。注意,完整的可运
2017-05-21 17:57:42
523
原创 Linux关机重启停机(shutdown reboot halt)流程分析
由于本人水平相当有限,不当之处还望大家多多指教。涉及的内核源码,基于linux-3.10.102。首先,对于用户态发起的这类操作请求,最终都是通过sys_reboot系统调用(源码在kernel/sys.c)实现的。其代码如下。如其注释所言,他除了可以重启关机停机,还可以修改ctrl-alt-del组合键的含义。另外,注释还说到此系统调用不会做sync。即sync需要用户在调用此系
2017-05-14 17:22:43
6002
原创 关于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
755
原创 raw binary文件探秘
Linux下的目标文件、动态库文件、可执行文件,其格式为elf格式。elf文件是有结构的文件,其内部有丰富的信息,例如,可能包含了可执行文件的入口地址,各个节的起始地址,可重定位信息,还可能包含指令与代码行的对应关系(用于调试)。内核则利用elf文件中的相关信息,加载运行可执行文件。然而内核映像,u-boot映像这些特殊的文件,则是raw_binary文件。这当然有他的原因。以u-
2017-04-25 23:57:08
3790
原创 超简单!!centos 6离线源码编译安装升级gcc、binutils、automake、autoconf
centos 6系列的Linux发行版,是非常成功(具足UNIX精神)的发行版,可能大家都已经用得非常习惯了。但问题是,其内核及附带的工具软件,版本却都非常老了。centos 7上的软件版本虽然比较新,但centos 7设计风格的突变(主要是引入了很不符合UNIX精神的systemd),可能在业界也引起了不少争议。而我们苦逼的开发者,可能面临既需要使用高版本的相关组件,又不想升级到ce
2016-12-23 21:05:53
11205
1
原创 程序设计的兼容性问题杂谈
程序的实现,经常会随着时间的推移不断的变化。不断变化的实现,经常又需要兼容以前的实现。本文试图在这方面做一些探讨。由于在下水平相当有限,不当之处,在所难免。还望大家多多指教。所谓兼容,指的是新版本的软件能够原封不动的接纳旧版本的配置文件、命令行参数、程序间交互消息、函数接口调用等。下面分几个方面来探讨。一、程序间交互消息的兼容性这
2016-12-14 00:08:24
2588
原创 DPDK开发杂记
注意,本文的示例是基于Linux x86_64环境。如果你的环境不一样,应当将文中的x86_64-native-linuxapp-gcc 换成实际的值。例如,32位linux环境,则换成i686-native-linuxapp-gccDPDK环境变量编译DPDK自带的应用程序,总是需要用到两个环境变量。可以在 ~/.bash_profile中追加如下两行内容。这
2016-08-11 08:08:54
7604
原创 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
8390
2
原创 Win7操作系统调优
对于64位win7,2G内存的配置,按照这个方法调优后,用起来性能杠杠的。看看我的笔记本,在不开程序时某个时刻的截图。下面直接说优化项:关闭 防火墙(你要说这不安全,那你就开着好了)disable不必要的开机启动项(可以通过360安全卫士完成)停止资源占用高且不太必要的服务:windows update、windows defender、windows fire
2016-08-07 00:04:54
680
原创 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
4983
原创 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
4482
原创 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
458
原创 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
1181
原创 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
616
原创 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
712
原创 Bourne Shell编程杂记
首先强调一下,Bourne Shell数据类型的概念极简单:一切变量的值,都是字符串。所以,也可以认为,Bourne Shell只有一种基本数据类型,那就是字符串。由于数据类型太简单,所以脚本中若要进行各种数学运算,只能借助其他程序(例如,expr程序)来完成。其他程序计算出的结果,在脚本中仍然保存为一个字符串。脚本第一行固定为如下内容#!/bin/sh他表示这是一
2016-05-25 10:12:28
921
原创 利用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
7924
原创 C语言与ELF机器语言之间的关系
C语言对机器模型的抽象层次,恰到好处。C语言使得开发者,刚好从最底层的费力低效的汇编编程中解脱出来,而又没有进一步往上层做抽象。这样一来既大大提高了开发效率,又不失对程序行为的精确控制能力,还使程序获得了良好的可移植性。可谓一举三得。同时,基本C库的理念,也是只做确定正确的事。他所提供的,大体都是最小粒度的几乎不会有变数的基础例程。不过,本文是要谈一谈C源码与ELF之间的一些联
2016-05-18 18:22:52
1405
原创 Linux下进程的退出
注意,本文说的是整个进程(一个进程可能包含多个线程)的退出。一个进程的退出,有可能是由进程自己的用户态代码主动退出的,也可能是由内核通过信号处理机制(如SIGKILL、SIGABRT)强制执行的。一、用户态主动退出有如下多种途径,直接main函数返回,调用exit调用_exit调用exit_group上面几种情况,前两者等价(All functions regi
2016-05-06 17:10:34
1322
原创 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
584
原创 C语言编程常用数值计算的高性能实现
本篇介绍一组非常简单却又很常用的数值计算的宏实现。本篇所提到的数值计算问题,相信C语言初学者都能做得出来,但是本篇中给出的例子实现却更注重效率。这些例子实现的最大特点是,消除了逻辑跳转。这样做的好处是避免了分支预测的风险,或者换句话说,可以更好地发挥处理器流水线的性能。由于本篇的问题都很简单,笔者就废话少说,直接看例子了。/* 高位全0,低N位全1 */#define Low_N_B
2016-04-23 16:55:15
4074
原创 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
3687
原创 Linux设备与驱动学习笔记(概述)
由于在下能力相当有限,有不当之处,还望大家批评指正^_^本文基于Linux内核2.6.32一、宏观架构在内核中,大量的驱动与设备(但不是全部),都按总线进行分类管理。例如,凡是pci设备或pci设备的驱动,都归到pci总线下管理。1. 从sys文件系统感受这种架构。/sys/bus/目录下列出了各种总线类型,像pci、i2c、usb、platform等。我们以p
2016-03-09 19:06:58
7076
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人