内核

android 4.0 内核(3.0)编译方法

与世无争的帅哥 提交于 2020-05-08 10:03:51
在编译之前呢要有交叉编译环境阿,android内核 自带 有交叉编译器 进入android4.0.3 源码内核包中lichee #cd buildroot/dl/ 你将会看到 arm-2010.09-50-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 编译kernal #cd lichee/linux-3.0 #make clean 如果你之前没有编译过那么这一步就不用了 #make ARCH=arm sun4i_crane_defconfig -->我的产品是sun4i_crane,这个一步是为了省略将来编译的时候让你选择ARM system type列出的选项 #make ARCH=arm menuconfig 这一步就是如果你没有指定的产品,那么省略上一步进行这一步操作,进行kernal图形界面的模块加载了 一切都配置完了呢,就该编译了 回到上一目录lichee中 #./build.sh -p sun4i_crane -k 3.0 参数-k表示选择的内核版本 如果中途没有出现意外的话,你会在最后看到,如下是针对(全志Allwinner出现的编译成功提示) **************** 编译成功 **************** #cd out #ls 有个android 文件夹,里面包含了bImage,lib

Java线程与Linux内核线程的映射关系

こ雲淡風輕ζ 提交于 2020-04-12 09:26:08
Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还是轻量级进程(LWP)。 Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是由JVM的实现来确定的。Linux 2.6上的HotSpot使用了NPTL机制, JVM线程跟内核轻量级进程有一一对应的关系 。线程的调度完全交给了操作系统内核,当然jvm还保留一些策略足以影响到其内部的线程调度,举个例子,在linux下,只要一个Thread.run就会调用一个fork产生一个线程。 Java线程在Windows及Linux平台上的实现方式,现在看来,是内核线程的实现方式。 这种方式实现的线程,是直接由操作系统内核支持的——由内核完成线程切换,内核通过操纵调度器(Thread Scheduler)实现线程调度,并将线程任务反映到各个处理器上。 内核线程是内核的一个分身。程序一般不直接使用该内核线程,而是使用其高级接口,即轻量级进程(LWP),也即线程。这看起来可能很拗口。看图: (说明:KLT即内核线程Kernel Thread,是“内核分身”。每一个KLT对应到进程P中的某一个轻量级进程LWP(也即线程),期间要经过用户态、内核态的切换,并在Thread Scheduler 下反应到处理器CPU上。) 这种线程实现的方式也有它的缺陷

Linux内存点滴 用户进程内存空间

别来无恙 提交于 2020-03-20 23:30:05
3 月,跳不动了?>>> 经常使用top命令了解进程信息,其中包括内存方面的信息。命令top帮助文档是这么解释各个字段的。 VIRT, Virtual Image (kb) RES, Resident size (kb) SHR, Shared Mem size (kb) %MEM, Memory usage(kb) SWAP, Swapped size (kb) CODE, Code size (kb) DATA, Data+Stack size (kb) nFLT, Page Fault count nDRT, Dirty Pages count 尽管有注释,但依然感觉有些晦涩,不知所指何意? 进程内存空间 正在运行的程序,叫进程。每个进程都有完全属于自己的,独立的,不被干扰的内存空间。此空间,被分成几个段(Segment),分别是Text, Data, BSS, Heap, Stack。用户进程内存空间,也是系统内核分配给该进程的VM(虚拟内存),但并不表示这个进程占用了这么多的RAM(物理内存)。这个空间有多大?命令top输出的VIRT值告诉了我们各个进程内存空间的大小(进程内存空间随着程序的执行会增大或者缩小)。你还可以通过/proc//maps,或者pmap -d 了解某个进程内存空间都分布,比如: #cat /proc/1449/maps … 0012e000

分析system_call中断处理过程

北战南征 提交于 2020-03-02 04:46:37
最初版本的MenuOS只支持version和help命令,显然这并不能满足我们的需求。我们现在来为它添加一个fork命令和fork-asm命令,其作用是测试fork的系统调用。 要增加一个命令也并不难,只需要~/LinuxKernel/linux-3.18.6/menu/test.c里的main函数中添加下面一行,然后添加它的实现(需要定义在main函数前面)就可以了。 MenuConfig("fork","Test system call fork",Fork); 最后一个参数Fork是一个函数指针,也就是我们对它的定义: int Fork(int argc, char *argv[]) { pid_t fpid; int count = 0; fpid = fork(); printf("Now pid = %d\n", fpid); if(fpid < 0) printf("Error in fork!"); else if(fpid == 0){ printf("I am the child process, my process id is: %d\n", getpid()); count++; } else{ printf("I am the parent process, my process id is: %d\n", getpid()); count++; }

CentOS6.5升级内核

会有一股神秘感。 提交于 2019-12-18 12:47:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文适用于CentOS 6.4, CentOS 6.5,估计也适用于其他Linux发行版。 1. 准备工作 确认内核及版本信息 [root @hostname ~] # uname -r 2.6 . 32 - 220 .el6.x86_64 [root @hostname ~] # cat /etc/centos-release CentOS release 6.5 ( Final ) 安装软件 编译安装新内核,依赖于开发环境和开发库 # yum grouplist //查看已经安装的和未安装的软件包组,来判断我们是否安装了相应的开发环境和开发库; # yum groupinstall "Development Tools" //一般是安装这两个软件包组,这样做会确定你拥有编译时所需的一切工具 # yum install ncurses-devel //你必须这样才能让 make *config 这个指令正确地执行 # yum install qt-devel //如果你没有 X 环境,这一条可以不用 # yum install hmaccalc zlib-devel binutils-devel elfutils-libelf-devel //创建 CentOS-6 内核时需要它们

《Linux内核分析》小节

老子叫甜甜 提交于 2019-12-09 22:17:37
笔者作为通信工程的学生,在学习这门课之前虽然会用Linux完成一些简单的任务,但却从没有接触过这个操作系统的内在之美。之前学完C语言的时候,就想认识这个神秘的Linux内核了,可是一直在数学建模和各种活动中抽不开身,学习的过程也是不得其法。直到我看到孟宁老师的《Linux内核分析》这门课时,我想我大概可以在二十年后吹牛了:“当年我大二,读Linux内核源码的时候.....” 只是在学习的过程中,没有找到合适的参考书,导致复习有些困难。到了第六、七周早早的把视频看完,周末想写博客的时候却记不起来了。与其参考别人的博文拼凑出一片,我觉得倒不如不写吧。 下面是学习这门MOOC的过程中写的6篇博文: 汇编一个简单的C程序 说到计算机,大家都知道现代计算机都是由冯诺依曼体系结构组成的,也就是储存程序计算机。让我先从它的工作模型说起。 通过一个简单的时间片轮转多道程序内核代码,分析linux操作系统 mykernel 是一个基于Linux 3.9.4的内核模拟程序,通过观察软件模拟的操作系统运行过程可以帮助我们理解操作系统的进程工作、调度机制。 跟踪分析Linux系统的启动过程 MenuOS是一个基于Linux 3.18.6内核的微型操作系统,本文使用gdb来观察系统的启动过程,至init进程被启动为止。 Linux下嵌入汇编代码调用API 在Linux系统下,我们不仅可以通过API

Linux小知识-5:内核结构

早过忘川 提交于 2019-12-07 11:50:20
Linux内核主要由五个部分组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。 稍微加以理解:CPU资源——内存资源——外存资源——外部资源——通信。 进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的 进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。 内存管理(MM)允许多个进程安全的共享主内存区域。Linux 的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余 的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映 射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。 虚拟文件系统(Virtual File System,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件 系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。 网络接口(NET

Linux 自检和 SystemTap

杀马特。学长 韩版系。学妹 提交于 2019-12-06 12:35:04
Linux 自检和 SystemTap 11/20. 2013 用于动态内核分析的接口和语言 现代的操作系统内核提供 自检 功能,即动态地检查内核以理解其行为的能力。这些行为可以反映内核问题和性能瓶颈。拥有这些信息时候,您就可以调优或修改内核以避免出现故障。本文探索一个名为 SystemTap 的开放源码基础设施,它为 Linux® 内核提供这种动态的自检。 SystemTap 是监控和跟踪运行中的 Linux 内核的操作的动态方法。这句话的关键词是 动态 ,因为 SystemTap 没有使用工具构建一个特殊的内核,而是允许您在运行时动态地安装该工具。它通过一个名为 Kprobes 的应用编程接口(API)来实现该目的,本文将探索这个 API。我们首先了解以前的一些内核跟踪方法,然后在深入探讨 SystemTap 的架构及其使用。 内核跟踪 SystemTap 与一种名为 DTrace 的老技术相似,该技术源于 Sun Solaris 操作系统。在 DTrace 中,开发人员可以用 D 编程语言(C 语言的子集,但修改为支持跟踪行为)编写脚本。DTrace 脚本包含许多探针和相关联的操作,这些操作在探针 “触发” 时发生。例如,探针可以表示简单的系统调用,也可以表示更加复杂的交互,比如执行特定的代码行。清单 1 显示了 DTrace 脚本的一个简单例子

Centos内核升级

本小妞迷上赌 提交于 2019-12-04 05:02:58
在yum的ELRepo源中,有 m ain l ine(3.13.1)、 l ong- t erm(3.10.28)这2个内核版本,考虑到long-term更稳定,会长期更新,所以选择这个版本。 1、导入public key rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 2、安装ELRepo到CentOS-6.5中 rpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm 3、安装 kernel-lt(lt=long-term) yum --enablerepo=elrepo-kernel install kernel-lt -y 或者安装kernel-ml(ml=mainline) yum --enablerepo=elrepo-kernel install kernel-ml -y 4、编辑grub.conf文件,修改Grub引导顺序 vim /etc/grub.conf # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You

android 内核编译 无法启动模拟器

天大地大妈咪最大 提交于 2019-12-03 10:17:03
Android源码,编译也通过了,可以正常启动模拟器。但是Android源码内是不包含kernel源码的模拟器,添加自己新编译的内核就启动不了 启动新编译的内核的模拟器的命令如下: 但是就是启动不了,默认情况下启动模拟器选择的kernel的位置是这里: PWD_PATH/prebuilt/android-arm/kernel/kernel-qemu-armv7 网上找了一下,原来是这样的,我下载的源码是2.3.1版本(内核版本是goldfish),而4.0版本一下的编译内核时候时候配置文件是:make goldfish_defconfig,4.0以上的版本的系统需要ARMv7架构或者以上才能运行,但是4.0以下的不许要。 而我却用了meke goldfish_armv7_defconfig,所以不能运行。 进入内核根目录,make clean一下 然后make goldfish_defconfig 再make -j4 等待完成就OK了。 来源: oschina 链接: https://my.oschina.net/u/1377657/blog/263346