linux系统
文章平均质量分 87
hanchaoman
这个作者很懒,什么都没留下…
展开
-
你真的理解了const和volatile关键字么?(我看不一定)
一、总结 1、const使得变量具有只读属性(但是不一定就是不能更改) 2、const不能定义真正意义上的常量(因为有的用const定义的变量,仍然可以更改) 3、const将具有全局生命期的变量存储于只读存储区(这个是对现代编译器是这样的,但是对ANSI编译器,仍然可以更改) 4、volatile强制编译器减少优化,必须每次从内存中取值 5、const修饰的变量不是一个真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边...原创 2020-12-24 20:34:34 · 298 阅读 · 1 评论 -
arm 基础:详解C中volatile关键字
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;void test(){ do1(); while(flag==0); do2();} 这段程..原创 2020-12-24 20:30:26 · 533 阅读 · 1 评论 -
Cortex-M3 双堆栈指针(MSP&PSP)
【双堆栈指针(MSP&PSP)】Cortex-M3内核中有两个堆栈指针(MSP & PSP),但任何时刻只能使用到其中一个。 复位后处于线程模式特权级,默认使用MSP。 通过SP访问到的是正在使用的那个指针,可以通过MSR/MRS指令访问指定的堆栈指针。 通过设置CONTROL寄存器的bit[1]选择使用哪个堆栈指针。CONTROL[1]=0选择主堆栈指针;CONTROL...转载 2019-12-27 10:02:32 · 4131 阅读 · 0 评论 -
Linux常用C函数-日期时间篇
Linux常用C函数-日期时间篇时间:2006-11-01 10:01:53 来源:Linux联盟收集 作者:日期时间篇asctimectimegettimeofdaygmtimelocaltimemktimesettimeofdaytimeasctime(将时间和日期以字符串格原创 2011-08-19 12:00:17 · 1380 阅读 · 0 评论 -
修改内核编译配置菜单(make menuconfig)
A.在Linux内核中增加自己的程序步骤(注意这里只是程序文件): 1.将编写的源代码复制到Linux内核源代码的相应目录中。2.在目录的Kconfig文件中增加新源代码对应项目的编译配置选项3.在目录的Makefile文件中增加对新源代码的编译条目。B.在Linux内核drivers/目录中增加目录和子目录步骤: 1.所加目录为daiq,文件如下:[daiq@lo原创 2012-08-07 11:10:38 · 183 阅读 · 0 评论 -
修改内核编译配置菜单(make menuconfig)
1.所加目录为daiq,文件如下:[daiq@localhost daiq]$ tree.|-- Kconfig|-- Makefile`-- test.c#注意此时各个目录中的Makefile和Kconfig文件是空的2.在新增的相应目录添加Kconfig和Makefile文件,上面的目录中已经添加。3.修改新增目录的父目录的Kconfig和Makefile文原创 2012-08-07 11:23:35 · 2745 阅读 · 0 评论 -
内核配置的Default kernel command string和uboot的bootargs变量区别
1. 如果uboot的bootargs设置了,kernel的Boot options中的Default kernel command string设置与否,都不启作用,即bootargs覆盖掉设置的Default kernel command string,打印的信息也是bootargs传过来的command string。 2. 如果uboot的bootargs未设置原创 2012-07-26 11:12:32 · 2429 阅读 · 1 评论 -
uboot环境变量与uImage中MTD分区关系
分区只是内核的概念,就是说A~B地址放内核,C~D地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等。1:在内核MTD中可以定义分区A~B,C~D。。。。。。并予以绝对的地址赋值给每个分区。我们可以来看看在内核中是怎样来对MTD进行分区的:arch\arm\plat-s3c24xx\common-smdk.c(atmel9260 ./drivers/mtd/nand/at91原创 2013-01-08 10:13:29 · 1508 阅读 · 1 评论 -
uImage启动根文件系统(系统启动挂载根文件系统时Kernel panic )
这类问题很常见,先总体介绍一下解决思路。能出现让人激动的的控制台,那么系统移植已经接近完成;但是不少人在最后一步出现问题。要点如下:1. 在正确的位置烧写正确格式的文件系统映象:2. 内核支持这种文件系统格式3. 文件系统的内容要完备上面说得简单,一个个介绍。1. 在正确的位置烧写正确的文件系统映象:(a). 正确的位置嵌入式原创 2013-01-08 09:58:10 · 1507 阅读 · 0 评论 -
进程与线程的区别联系
对于线程,进程的概念一直都是比较模糊,最近整理了一下。总结起来就是,线程是进程的一部分,进程是程序的一部分。这个说法不准确,但是可以指出期间的差别; 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一原创 2013-05-12 20:36:37 · 969 阅读 · 0 评论 -
linux 内核链表解析1
前言: 在linux 源代码中有个头文件为list.h 。很多linux 下的源代码都会使用这个头文件,它里面定义了一个结构, 以及定义了和其相关的一组函数,这个结构是这样的: struct list_head{struct list_head *next, *prev;}; 那么这个头文件又是有什么样的作用呢,这篇文章就是用来解释它的作用,虽然这是原创 2013-12-19 17:27:21 · 860 阅读 · 0 评论 -
linux 内核链表解析2
我用一个程序来说明在struct person 中增加了struct list_head 变量后怎么来操作这样的双向链表。 [cpp] view plaincopyprint?#include #include "list.h" struct person { int age;原创 2013-12-19 17:28:50 · 786 阅读 · 0 评论 -
SQlite在PC和ARM上的编译移植
SQlite是一个开源的嵌入式数据库,至于它的特性和性能,这里就不介绍了,google上很多介绍了。SQlite是很受欢迎的一个小型的数据库,现在手机上的两大操作系统ios和android上都是用它,足以见它的分量了吧。 PC端的平台是ubuntu 11.04 . ARM的平台是S3C6410。 SQlite的官网是www.sqlite.org,官网上的下载页面已经有很转载 2014-11-19 13:04:04 · 636 阅读 · 0 评论 -
vmware三种连接方式Bridge、Host-Only模式和NAT模式
本地连接:是本机用Bridge方式与虚拟机交互时使用的主机网卡;VMware Network Adapter VMnet1:是本机用Host-Only方式与虚拟机交互时使用的虚拟网卡;VMware Network Adapter VMnet8:是本机用NAT方式与虚拟机交互时使用的虚拟网卡;接下来是试验结论:1、Bridge模式:Bridge模式使用的网卡是转载 2015-03-22 20:57:45 · 1269 阅读 · 0 评论 -
Linux 文件系统理解
1.ext2文件系统整体布局一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如某种mkfs命令)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局的信息。下图是一个磁盘分区格式化成ext2文件系统后的存储布局。or如下第二种图(追加的图hanchaoman):文件系统中存储的最小单位是块(Block),一个块究竟多大是在格式化时确定...原创 2017-03-24 09:22:27 · 1262 阅读 · 0 评论 -
从free到page cache
Free我们经常用free查看服务器的内存使用情况,而free中的输出却有些让人困惑,如下: 图1-1先看看各个数字的意义以及如何计算得到:free命令输出的第二行(Mem):这行分别显示了物理内存的总量(total)、已使用的 (used)、空闲的(free)、共享的(shared)、buffer(buffer大小)、 cache(cache的大小)的内存。原创 2012-05-18 10:37:25 · 1563 阅读 · 0 评论 -
linux free命令解析
因为LINUX的内核机制,一般情况下不需要特意去释放已经使用的cache。这些cache起来的内容可以增加文件以及的读写速度。先说下free命令怎么看内存[c-sharp] view plaincopy[root@ahsq proc]# free total used free shared buffers cached Me原创 2012-05-17 19:13:30 · 2712 阅读 · 0 评论 -
linux core文件
1. 可以用ulimit -a 查看一下栈的大小。在内核2.6.20下, stack size 为8192 kbytes如果这里没有限制,就栈的大小就只受内存的限制。2G是上限。2. core 文件开启或关闭core文件的生成 ulimit -c 可以查看是否打开此选项,若为0则为关闭;ulimit -c 0可手动关闭ulimit -c 1000 为设置core文件大小最大原创 2009-08-03 23:19:00 · 6376 阅读 · 0 评论 -
VI快捷键
VIM快捷键:ctags 文件名 做索引光标移动: 四个方向 k h 0 l j ctrl+f, ctrl+b 向下翻页,向上翻页 ctrl+d, ctrl+u 向下半翻页,向上半翻页 $ 移动行尾 0 移动行首 w 移动下一个词 b 移动到上一个词 gg 跳到文档的开始处 G转载 2009-08-06 21:30:00 · 2264 阅读 · 1 评论 -
posix多线程函数速查
1.我的系统是否支持多线程如何知道我的系统是否支持多线程呢(POSIX标准)?有两种方法,一种方法是检查系统中的某些重要的头文件,如limits.h、unistd.h等;另外一种方法就是写一个简单的程序测试一下。由于前者比较复杂,所以一般采用后面的方法,即在程序中判断宏_POSIX_VERSION:l 如果没有定义宏_POSIX_VERSION,那么肯定不支持多线程;l原创 2010-03-15 15:57:00 · 180 阅读 · 0 评论 -
Linux Shell 下的输出重定向
Linux Shell 环境中支持输入输出重定向,用符号来表示。0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 2>a.txt 表示将错误信息输出到文件a.txt中。同时,还可以在这三个标准输入输出之间实现重定向,比如将错误信息重定向到标准输出,可以用 2>&1来实现。Linux下还有一个特殊的文件/dev/null,它就像一个无底原创 2010-04-15 22:17:00 · 760 阅读 · 0 评论 -
U盘系统安装盘
1.概述Linux 的最著名的引导程序有LILO 和Grub 了两种,作为通用的引导程序,二者用途广泛,但对于一些特殊的场合,譬如引导程序可利用的空间比较有限的可移动存储介质(通俗地说,包括光盘、软盘、u 盘等),它们有些过于厚重了。还有一些其他的引导方式比如SYSLINUX/ISOLINUX。SYSLINUX/ISOLINUX引导方式方式基本一样只应用在不同的介质上,本文主要介绍SYSLINUX方式U盘引导的制作和测试。2.环境硬件环境:cpu: intel core2 t5200memory: 102原创 2010-07-15 10:29:00 · 2141 阅读 · 0 评论 -
linux下的各项配置文件
<br /><br /> 1:/etc/sysconfig/i18n(语言配置文件). <br /> 2:/etc/sysconfig/network-scripts/ifcfg-eth0(eth0配置文件). <br /> 3:/boot/grub/grub.conf(grup配置文件) <br /> 或/boot/grub/menu.list. <br /> 4:/etc/passwd:系统用户数据库文件. <br /> 5:/etc/group:组的数据库文件. <br /> 6原创 2010-06-04 09:09:00 · 811 阅读 · 0 评论 -
shell中常用的特殊符号
<br />在shell中常用的特殊符号罗列如下:<br /># ; ;; . , / / 'string'| ! $ ${} $? $$ $* "string"* ** ? : ^ $# $@ `command`{} [] [[]] () (())原创 2010-06-25 16:13:00 · 870 阅读 · 0 评论 -
linux 驱动示例
<br />huxiongwei.spaces.eepw.com.cn/articles/article/item/74756转载 2011-03-01 13:54:00 · 588 阅读 · 0 评论 -
Linux实时调度策略
<br /> Linux提供了两种实时调度策略: SCHED_FIFO和SCHED_RR。 而普通的、非实时的调度策略是SCHED_NORMAL。<br /><br />SCHED_FIFO<br />----------------------------------------<br />SCHED_FIFO实现了一种简单的、先入先出的调度算法, 它不使用时间片。 SCHED_FIFO级的进程回比任何SCHED_NORMAL级的进程都先得到调度。 一旦一个SCHED_FIFO级进程处于可执行状态,就会一原创 2011-03-14 09:41:00 · 4537 阅读 · 0 评论 -
有关Linux下线程的调度
由于Linux对线程实现的一些特殊性,所以会给我们理解线程及其相关的一些函数带来疑惑,这里做个解答: 1、关于sleep 很多书籍上都说sleep这个系统调用会使整个进程sleep,而不单是sleep一个线程。这样说没错,但我们要是在Linux下写一个多线程 的程原创 2011-08-18 11:31:38 · 13008 阅读 · 1 评论 -
Linux内存管理-高端内存
上一周一直在关注linux内存中3:1(3G:1G)的关系,并没有考虑到如果我的物理内存大于1G,那么内核空间1G的虚拟空间如何映射整个物理内存呢?以及内核是如何管理这大于1G的物理内存的。 下面是转载的文章,解释了这个疑问。 高端内存是指物理地址大于 896M 的内存。对于这样的内存,无法在“内核直接映射空间”进行映射。为什么? 因为“内核直原创 2012-02-02 08:39:02 · 993 阅读 · 0 评论 -
linux 内核编译文档
一、makemenuconfig说明:make menuconfig(或者其他的配置命令),命令执行完后产生文件.config(隐含的),其中保存着配置信息。下一次再做make menuconfig将产生新的.config文件,原.config被改名为.config.old。 二、make oldconfig优点:迅速; 如果新内核选项没有出现在您的配置文件中,它会停下来并等候原创 2012-02-21 09:30:38 · 1528 阅读 · 0 评论 -
errno 列表
errno.h 写道#define EPERM 1 /* Operation not permitted */#define ENOENT 2 /* No such file or directory */#define ESRCH 3 /* No such process */#define EINTR 4 /* Interrupted system call */#de原创 2012-02-15 19:16:53 · 3318 阅读 · 0 评论 -
深入分析Linux内核源码
http://oss.org.cn/kernel-book/原创 2012-02-21 09:51:14 · 1332 阅读 · 0 评论 -
Linux 内核配置选项详解
http://book.51cto.com/art/201012/240801.htm原创 2012-03-13 21:10:55 · 851 阅读 · 0 评论 -
C中的malloc和free
在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用就是malloc然后free就一切OK了当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以写下这篇文章作为一个对知识的总结这篇文章之所以命名中有个浅谈的字眼,也就是这个意思了!希望对大家有一点帮助!转载 2009-04-17 17:40:00 · 1986 阅读 · 1 评论