专题3-嵌入式linux内核制作

一、linux体系结构

linux由内核空间与用户空间两部分组成,用户空间主要是应用程序和C库,内核空间包含了像系统调用接口,体系结构相关的代码。

现在的CPU实现了不同的工作模式,以ARM为例,实现了其中工作模式:

用户模式(usr)、快速中断(fiq)、外部中断(irq)、管理模式(SVC)、数据访问终止(abt)、系统模式(sys)、未定义指令异常(und)。

X86也实现了四个不同的级别:Ring0-Ring3 。 Ring0下,可以执行特权指令,可以访问IO设备等,在Ring3则有很多限制。Linux系统利用了CPU的这一特性,使用了其中的两级来分别运行linux内核与应用程序,这样使操作系统本身得到了充分保护。例如:如果使用X86,用户代码运行在Ring3,内核代码运行在Ring0.

内核空间与用户空间是程序执行的两种不同的状态,通过系统调用和硬件中断能够完成从用户空间到内核空间的转移。

linux 内核架构(这里用表模拟下)

System Call Interface
Porcess Management(PM) Virtual Files System(VFS)
Memory Managemet(MM) Network stack
ARCH Device Drivers(DD)

二、linux内核源代码

2.1 源代码下载

www.kernel.org   官网进行下载即可

2.2 目录结构(树形结构)

arch目录:architecture的缩写。内核所支持的每种CPU体系,在该目录下都有对应的子目录。每个CPU的子目录,又进一步分解为boot,mm,kernel等目录,分别包含控制系统引导,内存管理,系统调用等。

document目录:内核的文档部分

drivers目录:设备的驱动程序目录

include目录:内核所需要的头文件。与平台无关的头文件在 include/linux 子目录下,与平台相关的头文件在相应的子目录中。

fs目录:存放各种文件系统的实现代码。每个子目录对应一种文件系统的实现,公用的源程序用于实现虚拟文件系统VFS:

||--devpts  /dev/pts 虚拟文件系统
||--ext2   第二扩展文件系统
||--fat    MS的fat32文件系统
||--isofs   ISO9660光盘CD-ROM上的文件系统

net目录:网络协议的实现代码:

||--802     802无线通讯协议核心支持代码
||--appletalk 与苹果设备互联协议
||--ax25    AX25无线Internet协议
||--bridge   桥接设备
||--ipv4    IP协议簇V4版32位寻址模式
||--ipv6    IP协议簇V6版128位寻址模式

三、linux内核配置与编译

配置内核:硬件需求,软件需求。

    make config   这种方法是采用文本模式的配置
    make menuconfig  这种是基于文本模式的菜单形配置

首选是采用菜单形配置(直观、简单、高效)

使用make menuconfig 配置内核

    Process type and features 
                -----Process family

    Networking support 
                -----Networking Options

    Devices Drivers
                -----Network device support
    
    File system

这里说明下“[ ]”这种只有两种选择方式,有或者没有。而“ < > ”这种有三种选择方式。

<M> 内核模块,编译成.ko 动态调用。 “[]”直接便一道zImage内核映像中。

源代码的根目录中.config文件保存了内核配置结果,在源代码目录中使用 # ls -a 进行查看。

配置捷径:①:使用已有的配置项来改。 ②:不清楚的为默认值。

操作步骤如下:使用内核配置文件简化配置,当前linux系统的配置文件在 /boot/config-xxxx,如果是使用红帽6, 2.6.39内核可以直接使用其进行配置,将该 /boot/config-xxxx 文件复制到内核源代码。并输入以下命令

    make menuconfig   -> load an Alternate configuration File 

填写刚刚复制的文件名字进入,保存后利用已经有的配置文件进行修改。
配置内核实际上工作很多,但是如果有厂商之前给你做好了相关配置文件,比如我这里购买的smart210,友善之臂提供了相关的配置文件名字叫 mini210_linux_defconfig(mini210和smart210基本一样)这个文件,这个就是厂商配置文件,这里我的在内核的根目录下面,使用下面命令就可以直接使用该配置文件进行编译:

 cp mini210_linux_defconfig .config
 make uImage ARCH=arm CROSS_COMPILE=arm-linux-

这样即可编译成功,同样还有一种方法简化内核配置,在 内核arch/arm/configs 中找到自己板子的默认配置,基于这个配置进行修改也是很好的,使用起来也很简单.

make xxx_defconfig
make menu_config ARCH=arm 
make uImage ARCH=arm CROSS_COMPILE=arm-linux-

3.1 编译内核

<*> -> zImage

[M] -> 内核模块

    make zImage   在X86平台上,zImage内核只能用于512KB的文件大小。
    //所以一般都用下面的
    make bzImage  

如果需要获取详细的编译信息,可使用

    make zImage V=1
    make bzImage V=1 

编译好的内核在: arch/<cpu>/boot

3.2 编译内核模块

    make modules    (大概一个小时时间,比较长)
    make modules_install 

编译过后生成的文件遍布于各个目录中,凡是以 *.ko 结尾的都是内核模块

    make modules_install (将 *.ko 全部移动到/lib/modules)
    这里是linux主机的/lib/不是源码的目录。

3.3 制作ramdisk

方法:mkinitrd initrd-$version $version

例:

    mkinitrd initrd-2.6.39 2.6.39
    // *$version 可以通过查询 /lib/modules 下目录得到。

3.4 安装内核(x86)

    cp arch/x86/boot/bzImage /boot/vmlinuz-$version
    cp initrd-$version /boot/
    修改 /etc/grub.conf

3.5 清理文件

    make clean  :清理 *.0 *.ko 等文件
    make distclean :在上面的基础上

四、嵌入式linux内核制作

4.1 清除相关文件

    make distclean

4.2 配置内核

    make menuconfig   (x86)
    make menuconfig ARCH=arm  (ARM)

4.3 编译内核

    make bzImage (X86)
    make uImage ARCH=arm CROSS_COMPILE=arm-linux-

可能以上编译或许过不去,可能是因为源码中有配置initramfs这个挂载根文件系统的,所以过不去,因为这里还没有设置根文件系统,同时可能还有一个问题就是还缺少mkimage这个工具,需要从已经编译好的u-boot源码中tools中拷贝使用:

    cp mkimage /bin/      这里注意是拷贝到宿主机中
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 我们说的Linux其实指的就是 内核(kernel)而已。这个内核控制你主机的所有硬件并提供系统所有的功能,所以它...
    Zhang21阅读 7,379评论 0 18
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,131评论 2 34
  • 姓名:吴兆阳 学号:14020199009 转自韦东山 嵌牛导读:对嵌入式初学者,没有足够的视野选择一个合适投入方...
    吴兆阳阅读 2,375评论 0 4
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,130评论 9 467
  • 对于有的人来说,失眠意味着初入睡时的辗转反侧、难以成眠;对于有的人来说,意味着半夜时分半睡半醒之间那些散落在潜意识...
    心远轩阅读 185评论 0 0