linux内核
文章平均质量分 91
Eugene800
这个作者很懒,什么都没留下…
展开
-
对linux编译模块make -C path_to_kernel_src M=`pwd` modules的理解
这篇文章侧重点在M=`pwd`的个人理解,不足之处希望大神斧正,谢谢。 一直以为M=`pwd`是make的参数,可是这个参数也写的够简单。最近重看时,发现常有这样的makefile内容# Use 'make V=1' to see the full commandsifdef Vifeq ("$(origin V)", "command line")KBUILD_VERBOSE原创 2015-10-23 00:26:46 · 6122 阅读 · 2 评论 -
memtest86+4.20流程分析
公版ubuntu自带memtest86+内存测试工具,出于工作需要,分析了其工作流程记录于此。 分析一个陌生的程序,当然得先找入口入口函数,很可惜main()/_start之类的都找到,唯一看着像入口点的main.c文件也没找到可能的入口点。看来只能从makefile文件分析了。OBJS= head.o reloc.o main.o test.o init.o lib.o patn.原创 2016-03-02 14:06:21 · 4752 阅读 · 1 评论 -
制作initrd(5):解剖Ubuntu安装盘
ubuntu定期更新他们的iso,iso引导系统后会有Try/Install Ubuntu两个选项。特别是选择了livecd,仅仅一张盘子就能运行一个图形化的linux,总觉得挺神奇的。在好奇心的推动下我打算拆开iso分析它是怎样引导到系统的。 按常识,完整引导linux系统需要bootloader/kernel/(initrd)/fs这4个组件紧密配合(要不就叫启动4要素吧),光盘引导原创 2016-02-22 22:24:12 · 7976 阅读 · 3 评论 -
制作initrd(6):重做Ubuntu安装盘
接上篇 制作initrd(5):解剖Ubuntu安装盘 。上一篇主要提到了分解Ubuntu安装盘,这篇是解剖的反过程--合成安装盘iso,内容相对比较少。 如果仅仅把安装盘拆开看看然后合回去,作为学习目的还可以,但是真的有点浪费篇幅了。其实,拆开的光盘还能塞点东西进去,就是所谓的定制光盘。笔者近期就遇到要把公司的一个客户端软件加密进Ubuntu光盘filesystem.squashfs镜原创 2016-02-24 21:10:16 · 1956 阅读 · 3 评论 -
ubuntu安装AMD私有显卡驱动
工作中遇到装有A卡的笔记本运行startx后无法进入图形桌面,好生头痛 手动运行startx,发现Xorg打印了大量错误,其中一条信息如下:modprobe:Error:could not insert ‘fglrx’:Function not implemented 网上查了下,是AMD显卡驱动没有装上,于是下载了amd驱动源码编译。我下载的驱动源码是fglrx.原创 2016-03-24 20:45:52 · 3991 阅读 · 1 评论 -
linux2.4内核 path_walk流程简析
这里以path_walk解析/usr/lib/glibc为例:int path_walk(const char * name, struct nameidata *nd){ /* nd是path_init返回的结构,包含了程序的根目录.因此,path_walk是从根目录开始解析。 开始时跳过路径/usr/lib/glibc中第一个'/',以后for循环处理剩下的字符串usr/lib/g原创 2016-06-08 00:04:13 · 954 阅读 · 0 评论 -
Linux内核中自旋锁同步分析
6-7-8章关于自旋锁同步中提出”中断处理下半部的操作中使用自旋锁尤其需要小心:下半部处理和进程上下文共享数据时,由于下半部的处理可以抢占进程上下文的代码, 所以进程上下文在对共享数据加锁前要禁止下半部的执行,解锁时再允许下半部的执行“ 以下为此处提出的注意点的个人理解,水平有限希望路过的大神能留下宝贵的点评 谢谢~ 1.首先看下in_interrupt()的定义: #原创 2014-10-29 13:59:31 · 937 阅读 · 0 评论 -
深入理解 Linux 2.6 的 initramfs 機制 (上)
转自 http://blog.linux.org.tw/~jserv/archives/001954.html日前結束一個消費性電子產品的開發工作,稍有心得,試著整理採取 Linux kernel 2.6 initramfs 機制以加速系統開發的經驗,同時也談論對 fast-booting 設計的重要性,順便解決某些像是「kinit/klibc 為何被提出?」等疑難雜症。進入主題前,先转载 2017-02-07 00:01:17 · 1112 阅读 · 0 评论 -
制作最小linux内核(1)
深入理解 Linux 2.6 的 initramfs 機制 (上) 一文提到了制作简易initramfs的过程;而另一篇文章使用udevadm(modinfo)查找linux下设备对应的驱动 则提到了匹配设备驱动的方法,本文对上面两篇文章做个总结----定制一个最小系统。环境为:vmware10+ubuntu14.04(kernel 3.13.0)+Scsi虚拟磁盘。目标是用这个定制的内核引导原创 2017-02-16 20:23:02 · 11341 阅读 · 4 评论 -
使用udevadm(modinfo)查找linux下设备对应的驱动
制作initramfs的过程中需要为系统搭载的设备匹配驱动,linux下搜索驱动的方法众多,不同类型的设备可能会有不同的搜索方法,很难找到一种统一的方法。我摸索了很久,试图用/sys文件系统和udevadm来匹配各类设备对应的驱动。 windows会将设备分门别类的存放:比如将USB网卡/PCI网卡归为网卡类;移动硬盘/Scsi硬盘归入存储设备类。同样的归类方式也被linux所应用,li原创 2017-02-09 00:24:49 · 7450 阅读 · 0 评论 -
制作最小linux内核(2)
制作最小linux内核(1) 一文中定制了一个小型内核,当重启系统加载小型内核后,往屏幕上输出"Hello world"。说实话,这样的OS并没有什么作用,至少得有个能和用户交互的界面吧?本文将继续定制内核,以实现这个目的。要实现这个目的需要2部分支持:1.继续配置内核选项以完善内核功能;2.为initrd.img增加新功能。 1.先来完成第一部分,在这步中需要加入以下内核选项:1.原创 2017-02-22 21:35:11 · 3363 阅读 · 0 评论 -
Linux内核构建系统之八
转自:http://www.juliantec.info/julblog/yihect/linux-kernel-build-system-8Linux内核构建系统之八yihect | 11 元月, 2011 12:59在编译 vmlinux 以及 modules 的过程中,构建系统已经产生了很多输出:vmlinux elf 映像、System.map符号表文件、各转载 2016-01-12 21:48:32 · 933 阅读 · 0 评论 -
Linux内核构建系统之六
转自:http://www.juliantec.info/julblog/yihect/linux-kernel-build-system-6Linux内核构建系统之六yihect | 10 元月, 2011 16:38回到处理 vmlinux 的那条规则上面来,在处理好 $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main)等转载 2016-01-11 21:54:15 · 872 阅读 · 0 评论 -
Linux内核构建系统之五
转自:http://www.juliantec.info/julblog/yihect/linux-kernel-build-system-5Linux内核构建系统之五yihect | 09 元月, 2011 10:52对另外构建目标的处理,我们使用两个例子来讲述,那就是配置内核后用来编译内核的命令:"make ARCH=arm CROSS_COMPILE=arm-转载 2016-01-10 23:28:57 · 746 阅读 · 0 评论 -
制作initrd(1):向initrd内部更新驱动模块
从centos到ubuntu,grub从grub1进化到grub2,其配置文件的内容也跟着发生了巨大的变化。但是配置文件中有几项参数一直变化不大:linux root和initrd,一直指向内核镜像 根设备和initrd镜像的路径。就算换到uboot上,依然能见到这三项参数,其重要性可见一斑。3个参数以内核镜像最重要,而initrd却是时有时无的参数。 虽然initrd的存在感不强,但却原创 2015-11-22 21:55:33 · 7457 阅读 · 1 评论 -
Linux内核构建系统之七
转自:http://www.juliantec.info/julblog/yihect/linux-kernel-build-system-7通过前面的分析,我们已经知道,在 Linux 中,区分有两种模块:内部模块和外部模块。我们这里说的对目标 modules 的处理指的就是要编译出那些内部模块,对外部模块的处理我们将在后面叙述。我们还知道,不管是内部模块,还是外部模块,其编译都要分转载 2016-01-17 20:30:31 · 1203 阅读 · 0 评论 -
Linux内核构建系统之九
转自:http://www.juliantec.info/julblog/yihect/linux-kernel-build-system-9这个系列的上一片文章介绍了为讲述构建目标而举的第一个例子:"make ARCH=arm CROSS_COMPILE=arm-linux-"。接下来,让我们来看看另外一个例子,也就是编译外部模块的命令:"make ARCH=arm CROSS_CO转载 2016-01-17 20:35:15 · 760 阅读 · 0 评论 -
Linux内核构建系统之十
转自:http://www.juliantec.info/julblog/yihect/linux-kernel-build-system-10到目前为止,内核构建系统的大部分重要的地方都已讨论完毕,惟独有一个很关键的方面还没讨论完全,那就是依赖关系的处理。熟悉Linux内应用程序开发的人都知道,要想用 make 工具来自动化的管理他们的应用项目工程,就必须正确处理所要编译的目标和生成转载 2016-01-17 20:37:42 · 676 阅读 · 0 评论 -
制作initrd(4):initrd.img中启动脚本init分析
概述:这篇文章主体内容来源于网上转载。前面几篇文章倾向于制作initrd.img,这篇文章更倾向于initrd.img的运行过程:加载framebuff驱动 ide驱动和文件系统驱动,最后进入到真正的根文件系统。以下内容全是转载:转自 ubuntu/debian initrd 过程 自己最近花时间研究了一下 linux 的 initial ram disk,然后就写了这篇文章。转载 2015-11-30 23:55:38 · 4138 阅读 · 0 评论 -
Linux内核构建系统之一
转自http://www.juliantec.info/julblog/yihect/linux-kernel-build-system-1 概论 在xNIX世界中,您若要想使用任何一款软件,通常来说都必须先从官方站点上获取源代码、继而编译安装、最后才是动手使用。概括起来,整个其过程一般可分成以下几个步骤:a) 获取该软件的源代码;源代码通常是以压缩包的转载 2016-01-05 20:15:36 · 1056 阅读 · 0 评论 -
Linux内核构建系统之二
转自http://www.juliantec.info/julblog/yihect/linux-kernel-build-system-2Linux内核构建系统所支持的目标 由前面的概述可以知道,不管是kconfig步骤、还是kbuild步骤、还是安装都可藉由"make targets"形式的命令来完成。所以,分析一下所有可能的targets是必要的。内核构建系统所支持的目转载 2016-01-05 20:16:48 · 1149 阅读 · 0 评论 -
Linux内核构建系统之三
转自http://www.juliantec.info/julblog/yihect/linux-kernel-build-system-3顶层Makefile的总体框架结构 既然前面我们说过顶层Makefile最为重要,那么我们就先来研究一下这个文件。在你用VI编辑器打开这个文件时,千万别被它的复杂吓倒。这个文件虽然行数颇多,但其实里面也是有道道可寻的,我们可以抽出其中最重转载 2016-01-06 20:25:05 · 1025 阅读 · 0 评论 -
Linux内核构建系统之四
转自http://www.juliantec.info/julblog/yihect/linux-kernel-build-system-4回到我们的主框架上面来,讨论完配置目标的处理后,就轮到框架中 "ifeq ($(config-targets),1)-endif" 块的 else 部分了。这部分是为了处理那些构建目标以及和.config无关的目标,其对这些目标处理的代码都位于框架转载 2016-01-06 23:48:02 · 969 阅读 · 0 评论 -
内核makefile echo-cmd表达式
Kbuild.include中提供了内核编译时基础函数,其中echo-cmd变量的功能让我一直能疑惑。其定义如下:echo-cmd = $(if $($(quiet)cmd_$(1)),\ echo ' $(call escsq,$($(quiet)cmd_$(1)))$(echo-why)';) 从字面理解,应该是回显命令,而且初看也是打印命令到终端。但是,事实上,那只是他一半的功原创 2015-12-23 00:37:22 · 1991 阅读 · 1 评论 -
制作最小linux内核(3)
本文是制作最小linux内核系列的最后一篇,这篇相对简单:把内核配置界面下"Device Driver"选项中一些编译进内核的驱动编译成模块,并把这些模块安装到initrd.img。当引导系统时,内核从initrd.img中加载模块,最终使系统正常工作起来。首先配置内核选项,执行make menuconfig进入Device Driver选项:将"Serial ATA and Parall原创 2017-02-22 23:31:00 · 3576 阅读 · 0 评论