
Linux
瑜珈山神
这个作者很懒,什么都没留下…
展开
-
linux下 open() write() read() close函数
1. open()函数功能描述:用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数。所需头文件:#include,#include,#include函数原型:int open(const char *pathname,intflags,int perms)参数:pathname:被打开的文件名(可包括路径名如"dev/ttyS0")flags:文转载 2016-02-15 11:41:36 · 523 阅读 · 0 评论 -
Link-time optimization LTO分析
参考Link-time optimization for the kernel —— 2012 内核开发人员总是在寻找让系统运行更快的方法,在优化方面投入了大量的工作。所以当一个不需要重写关键性能相关的代码就可以让内核变得更快的机会出现时,很自然的,吸引了很多人的兴趣。新版本gcc支持的Link time optimizations LTO功能是不是这样的一个机会还有待验证,原创 2016-08-31 09:33:00 · 5221 阅读 · 0 评论 -
kthreadd khelper 内核线程
kthreadd:这种内核线程只有一个,它的作用是管理调度其它的内核线程。它在内核初始化的时候被创建,会循环运行一个叫做kthreadd的函数,该函数的作用是运行kthread_create_list全局链表中维护的kthread。可以调用kthread_create创建一个kthread,它会被加入到kthread_create_list链表中,同时kthread_create会weak u转载 2016-08-05 10:01:26 · 1223 阅读 · 0 评论 -
Linux内核中的常用宏container_of其实很简单
http://blog.youkuaiyun.com/npy_lp/article/details/7010752 开发平台:Ubuntu11.04 编 译器:gcc version 4.5.2 (Ubuntu/Linaro4.5.2-8ubuntu4) Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结转载 2016-06-21 14:24:32 · 606 阅读 · 0 评论 -
CFS中的虚拟运行时间vruntime
一直对CFS(Completely Fair Scheduling,完全公平调度)中的虚拟运行时间(vruntime)不太理解,最近在看cgroup中的cpu子系统算是搞清楚了它是怎么回事。先 简单说一下CFS调度算法的思想:理想状态下每个进程都能获得相同的时间片,并且同时运行在CPU上,但实际上一个CPU同一时刻运行的进程只能有一个。 也就是说,当一个进程占用CPU时,其他进程就必须等待转载 2016-06-20 16:17:37 · 926 阅读 · 1 评论 -
构建gcc交叉编译工具链
如何构建一个GCC交叉编译工具链GCC不仅是一个编译器,它是一个开源工程,可以让你建立各种编译器。一些编译器支持多线程,一些支持共享库,一些支持Multilib(典型的应用是在64位机上运行32位应用程序),这些都取决于在编译 编译器 时的配置。本文档将说明怎么建立一个交叉编译器。你需要一个已经安装gcc的Unix-like环境。 一、需要的包Debian系统,首先需要安装转载 2016-06-14 13:36:17 · 9634 阅读 · 1 评论 -
Linux 打开/关闭CPU命令
怎么关闭CPU下面的语法表示关闭CPU core #4:echo 0 > /sys/devices/system/cpu/cpu3/online怎么开启CPU下面的语法表示打开CPU core #4:echo 1 > /sys/devices/system/cpu/cpu3/online怎么验证有没有开启或关闭呢?grep "processor" /proc/c转载 2016-06-14 13:31:20 · 9858 阅读 · 0 评论 -
busybox mdev
这篇文章说的很好http://blog.chinaunix.net/u1/38994/showart_2022040.html:如何使用busybox精简版本udev程序--mdev动态创建插入的u盘和鼠标等设备busybox的mdev是一个精简了的udev管理程序,它可以间接的以hotplug方式被内核调用,进而在arm平台上/dev目录下动态创建设备节点,因为hotplug会被内核发送转载 2016-06-07 16:50:21 · 1394 阅读 · 0 评论 -
查看一个可执行文件或者库的依赖库
经常需要查看一个可执行文件或者库依赖那些库文件。通常情况下这很好办,使用ldd命令就可以了,比如:123456$ ldd /bin/bash linux-vdso.so.1 => (0x00007ffd8ffef000) libtinfo.so.5 => /lib/x86_64-linux-g转载 2016-05-09 20:15:30 · 29197 阅读 · 0 评论 -
openwrt环境下,编译kernel时,开启CONFIG_INPUT_MOUSE编译出错
编译kernel时,开启CONFIG_INPUT_MOUSE编译出错,提示psmouse.ko errorundefined reference to `lifebook_detect' undefined reference to `fsp_detect' 原因是gcc版本太高(gcc 5.x)导致修改文件 drivers/input/mous原创 2016-10-09 19:50:47 · 1085 阅读 · 0 评论 -
kernel 不能找到xz格式的initramfs
遇到一个问题,使用xz压缩的initramfs,启动kernel过程中失败,使用gzip压缩的initramfs,kernel正常启动。首先检查是否开启kernel选项CONFIG_INITRAMFS_SOURCE、CONFIG_RD_XZ、CONFIG_INITRAMFS_COMPRESSION_XZ等等,没有问题。后来google发现,在生成initramfs.cpio原创 2016-09-21 17:36:38 · 1742 阅读 · 0 评论 -
深入理解Linux内核-第五章笔记
内核同步内核同步内核如何为不同的请求提供服务内核抢占同步原语每CPU变量原子操作优化和内存屏障自旋锁顺序锁读-拷贝-更新RCU信号量完成量禁止本地中断对内核数据结构的同步访问避免竞争条件的实例内核如何为不同的请求提供服务内核抢占如果进程正执行内核函数时,即它在内核态运行时,允许发生内核切换,这个内核就是抢占的。同步原语各种同步技术: 技术 说明 适用范围原创 2017-07-26 20:28:58 · 827 阅读 · 0 评论 -
深入理解Linux内核-第四章笔记
第四章 中断和异常中断信号的作用中断与异常IRQ和中断高级可编程中断控制器异常中断描述符表中断和异常的硬件处理中断和异常处理程序的嵌套执行初始化中段描述符表中断门陷阱门及系统门IDT的初步初始化异常处理中断处理IO中断处理第四章 中断和异常中断interrupt通常被定义为一个事件,改事件改变处理器执行的指令顺序。这样的事件与CPU芯片内部外部硬件电路产生的电信号相对应原创 2017-07-26 20:28:13 · 962 阅读 · 0 评论 -
深入理解Linux内核 第一章笔记
第一章 绪论Linux与其他类Unix内核的比较硬件的依赖性Linux版本操作系统基本概念Unix文件系统概述Unix内核概述第一章 绪论Linux是Unix-like操作系统大家族中的一员。从20世纪90年代末开始,Linux突然变得非常流行,并且跻身于那些知名的商用Unix操作系统之列。这些Unix系统包括AT&T公司(现由SCO公司所有)开发的System V Release 4原创 2017-07-08 16:27:16 · 946 阅读 · 0 评论 -
Linux等待队列waitqueue
waitqueuewaitqueue创建一个等待队列让当前进程开始等待1 wait_event2 wait_event_timeout3 wait_event_interruptible4 wait_event_interruptible_timeout唤醒等待队列上的进程内核中提供了等待队列,作用是实现阻塞操作。等待队列用于使进程等待某一特定的事件发生而无需频繁的轮询,进程在等待原创 2017-06-15 11:25:31 · 1641 阅读 · 1 评论 -
深入理解Linux内核 第三章笔记
深入理解Linux内核深入理解Linux内核第三章 进程进程轻量级进程和线程进程描述符进程切换创建进程撤销进程第三章 进程进程是任何多道程序设计的操作系统中的基本概念。通常把进程定义为程序执行的一个实例。在Linux中,常把进程称为任务task或线程thread。进程、轻量级进程和线程进程类似人类:它们被产生,有或多或少的生命,可以产生一个或多个子进程,最终都要死亡。一个微小的差异是进原创 2017-07-12 20:19:58 · 856 阅读 · 0 评论 -
深入理解Linux内核 第二章笔记
深入理解Linux内核深入理解Linux内核第二章 内存寻址内存地址硬件中的分段Linux中的分段硬件中的分页Linux中的分页第二章 内存寻址内存地址引用内存地址memory address是访问内存单元内容的一种方式。需要区分以下三种不同的地址: - 逻辑地址 logical address 包含在机器语言指令中用来指定一个操作数或一条指令的地址。每一个逻辑地址都由一个段seg原创 2017-07-11 11:06:01 · 653 阅读 · 0 评论 -
uptime 简介
uptimeuptimeuptime 命令说明uptime 参数说明uptime 输出说明uptime - Tell how long the system has been running. uptime命令能够打印系统总共运行了多长时间和系统的平均负载。uptime命令可以显示的信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟原创 2017-06-08 09:52:55 · 861 阅读 · 0 评论 -
Linux __stringify && __stringify_1
Linux中有个stringify的头文件,里面主要的内容如下:#ifndef __LINUX_STRINGIFY_H#define __LINUX_STRINGIFY_H/* Indirect stringification. Doing two levels allows the parameter to be a * macro itself. For example, co原创 2017-03-08 10:54:01 · 1013 阅读 · 0 评论 -
删除libnss*库后,busybox login遭遇login incorrect
针对glibc删除了所有的libnss库,开机时在输入密码root后,出现login incorrect错误选项,而uclibc没有此问题。具体原因: GNU Libc (glibc) uses the Name Service Switch (NSS) to configure the behaviorof the C library for the local environm原创 2016-06-02 11:07:08 · 1346 阅读 · 0 评论 -
如何构建Ext4格式镜像文件
翻译自:http://forum.xda-developers.com/showthread.php?t=1974014我们将制作一个新的ext4格式镜像文件,命名为system_new.img,其大小为240MB。 第一步 Linux环境(我使用Ubuntu) 准备两个目录: mkdir system #将mount旧的sys翻译 2016-05-19 13:44:33 · 2101 阅读 · 1 评论 -
Linux下各个errno的意思
#include #include #include int main(int argc, char ** argv){ int i = 0; for(i = 0; i { printf("errno.%02d is: %s\n", i, strerror(i)); } return 0;}原创 2016-03-08 11:21:23 · 4358 阅读 · 0 评论 -
Netlink
Netlink套接字家族(英语:Netlink socket family)是一組Linux核心介面(Linux kernel interfaces),可用於行程間通訊,Linux内核与用户空间的进程间、用户进程间的通讯。然而它并不像网络套接字可以用于主机间通讯,Netlink只能用于同一主机上进程通讯,并通过PID来标识它们。Netlink被设计为在Linux内核与用户空间进程传送各种网络信转载 2016-02-16 09:02:35 · 1906 阅读 · 0 评论 -
pthread(一) —— pthread_create & pthread_join
pthread_createpthread_create是类Unix操作系统(Unix、Linux、MacOS X等)的创建线程的函数。头文件 :#include函数定义:intpthread_create(pthread_t *tidp,const pthread_attr_t *attr,(void*)(*start_rtn)(void*),void *arg);编译链原创 2015-12-22 10:32:53 · 1039 阅读 · 0 评论 -
POSIX定时器timer_create、timer_settime、timer_delete
创建、初始化以及删除一个定时器分别对应如下三个函数:timer_create、timer_settime、timer_delete#includeinttimer_create(clockid_t clock_id, struct sigevent *evp,timer_t*timerid)创建的定时器是每个进程自己的,不是在fork时继承的。参数:clock_原创 2015-12-22 10:36:26 · 2303 阅读 · 0 评论 -
setsockopt()
头文件:#include #include 定义函数:intsetsockopt(int s, int level, int optname, const void * optval,,socklen_toptlen);函数说明:setsockopt()用来设置参数s所指定的socket状态.参数level代表欲设置的网络层,一般设成SOL_SOCKET以存取socke转载 2015-12-22 11:25:49 · 776 阅读 · 0 评论 -
setsockopt调用IP_ADD_MEMBERSHIP出错errno:19 no such device
if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) printf("setsockopt fail, try again\n"); usleep(200 * 1000); continue; }转载 2015-12-28 16:14:44 · 7507 阅读 · 0 评论 -
广播Boradcast socket sendto出错 errno: 101 Network is unreachable
关键字:linux 广播 255.255.255.255 sendto error: Network is unreachable 全网广播场景: 今天调试linux 网络编程的广播,当向255.255.255.255 的某个端口发送广播包的时候,sendto 返回 -1,错误原因是:sendto erro转载 2015-12-29 15:26:26 · 14123 阅读 · 2 评论 -
Linux系统如何查看版本信息
1. 输入"uname -a ",可显示电脑以及操作系统的相关信息。 2. 输入"cat /proc/version",说明正在运行的内核版本。3. 输入"cat /etc/issue", 显示的是发行版本信息4. lsb_release -a (适用于所有的linux,包括Redhat、SuSE、Debian等发行版,但是在debian下要安装lsb)此外转载 2016-02-15 11:30:42 · 591 阅读 · 0 评论 -
Bash脚本学习(1)
#!/bin/bash if [ $# != 1 ]; then echo -e "Usage:\n\t $0 " exitelse password=$1fiecho -e "For Ubuntu 14.04 64bit, auto install some tools.\n"echo ${password} | sudo -S apt-get update如上原创 2016-03-23 11:23:23 · 489 阅读 · 0 评论 -
Git使用教程
Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统。二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以转载 2016-04-12 14:35:32 · 312 阅读 · 0 评论 -
linux内核的生成过程, vmlinux调试分析
1. 依据arch/arm/kernel/vmlinux.lds 生成linux内核源码根目录下的vmlinux,这个vmlinux属于未压缩,带调试信息、符号表的最初的内核,大小约23MB; arm-linux-gnu-ld -EL -p --no-undefined -X -o vmlinux -T arch/arm/kernel/vmlinux.lds转载 2016-04-22 09:37:36 · 2928 阅读 · 0 评论 -
ramdisk initrd ramfs initramfs区别与联系
问题:当Linux内核启动时,必须找到并执行第一个用户程序,通常是init。用户程序存放在文件系统,故Linux必须找到并挂载第一个文件系统。通常,可用的文件系统都列在/etc/fstab,所以mount可以找到它们。但是/etc/fstab本身存在与文件系统中。因此,这类似鸡生蛋蛋生鸡的问题。为解决该问题,内核开发者建立了内核命令列表选项root=,用来制定root文件系统存在于哪个原创 2016-05-06 15:19:27 · 5657 阅读 · 0 评论 -
Embedded Linux - File System
翻译 http://elinux.org/File_Systems文件系统目录1 简介1.1 MTD1.2 UBI1.3 分区1.4 eMMC and UFS2 嵌入式文件系统2.1 AXFS2.2 Btrfs2.3 CramFS2.4 F2FS2.5 InitRAMFS2.6 JFFS22.7 LogFS2.8 NFS2.9 PRAMFS2.1转载 2016-05-06 11:24:00 · 1539 阅读 · 0 评论 -
Linux根文件系统裁剪 论文阅读笔记
Linux裁剪方法研究 2006 2Linux裁剪原理: 2Linux嵌入式系统根文件系统的选择与制作 2006 3Linux嵌入式系统根文件系统的选择与制作 2006 3基于ARM的嵌入式Linux操作系统移植的研究 2006 5基于ARM的嵌入式文件系统研究与设计 2010 6基于嵌入式Linux的Ext2根文件系统制作分析 2015 6嵌入式Linux裁剪原创 2016-05-06 09:12:47 · 6750 阅读 · 0 评论 -
笔记:构建嵌入式Linux系统(第二版)—— 第一章 概述
第一章 概述Linux OS于1991年夏首度问世。最开始是由Linus Torvalds以源码形式发布,需要有足够的专业知识才能构建和安装。后续Linux早期的爱好者/开发者建立了第一个Linux软件发行套件Distribution,包括安装和使用一个Linux系统时需要用到的所有软件组件。Linux的成果起源于之前许多项目的成果。Richard Stallman和“自由软件基金原创 2016-04-19 11:45:23 · 1495 阅读 · 0 评论 -
kconfig 和 config.in 语法 翻译
内核源码树的目录下都有两个文件Kconfig(2.4版本是Config.in)和Makefile。分布到各目录的 Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出菜单,用户选择后保存到.config的内核配置文件中。在内核编译时,主 Makefile原创 2016-04-16 11:36:46 · 5051 阅读 · 0 评论 -
umask与chmod
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.ba原创 2016-04-14 17:28:37 · 2279 阅读 · 0 评论 -
阅读根文件系统论文笔记
uClinux下JFFS2文件系统的实现.pdf 2004JFFS文件系统是瑞典Axis通信公司开发的一种基于Flash的日志文件系统,JFFS2是它的第2版,由Redhat公司开发。JFFS2以其优异的性能在嵌入式系统中被越来越广泛地使用. 嵌入式Linux文件系统研究与应用.pdf 2010在嵌入式系统中,文件系统的类型和文件的存储介质密切相关。通常,嵌入式系统外围存储器使用F原创 2016-04-27 15:02:31 · 1569 阅读 · 0 评论 -
基于busybox的bootchart分析
一、Bootchart简介Bootchart官网http://www.bootchart.org,已经很久没有更新了。Bootchart的目的是将启动阶段的性能可视化(Boot Process Performance Visualization)。具体做法是在启动阶段通过采样/proc文件系统来搜集启动阶段的信息(如CPU负载,进程信息,磁盘访问等),然后通过另外的工具将搜集到的数据以可视化的方式进转载 2017-09-25 13:36:38 · 1939 阅读 · 0 评论