使用交叉编译环境

建立好自己的交叉编译环境,就可以进行kernel的编译。这部分也是对O'Reilly的《Building Embeded Linux System》的第五章的一个实践。我们仍使用moblin作为例子。他已经为kernel提供了config文件的例子。对于menlow,需要将config-generic和config-menlow进行合并。可以在generic的基础上,通过手工根据menlow的配置来改动,也可以使用moblin提供的merge.pl,merg.pl config-generic config-menlow > wei-config,然后cp wei-config .config,即可 。在alpha3的版本似乎merge的结果有些问题,还是需要进行手动来改,但是在beta的版本中,没有问题。

$ make ARCH=x86 CROSS_COMPILE=i586-linux- bzImage   『由于kernel比较大,如果使用zImage,会报错,要求使用bzImage』
$ make ARCH=x86 CROSS_COMPILE=i586-linux- modules

对于交叉编译环境,为了不会出现误操作,覆盖我们host系统文件,不要使用root的身份进行。在完成编译之后,我们整理生成的关键系统文件,并将其保存好:

$ cp System.map $PRJROOT/images/myproject/System.map-2.6.29-menlow
$ cp vmlinux $PRJROOT/images/myproject/vmlinux-2.6.29-menlow
$ cp .config $PRJROOT/images/myproject/2.6.29-menlow.config
$ cp arch/x86/boot/bzImage $PRJROOT/images/myproject/bzImage2.6.29-menlow
$ mkdir modules-2.6.29-menlow
//用于存放我们modules

安装模块,存放在指定的位置:$ make ARCH=x86 CROSS_COMPILE=i586-linux- INSTALL_MOD_PATH=$PRJROOT/images/myproject/modules-2.6.29-menlow modules_install

我们需要通过busybox来建立模块之间的依赖关系。

$ wget http://busybox.net/downloads/busybox-1.13.4.tar.bz2
$ cd busybox-1.1.1
$ make defconfig
  //使用默认配置,可以通过 make menuconfig来进行配置,好多选项
$ make

BusyBox 最初是由 Bruce Perens 在 1996 年为 Debian GNU/Linux 安装盘编写的。其目标是在一张软盘上创建一个可引导的 GNU/Linux 系统,这可以用作安装盘和急救盘。一张软盘可以保存大约 1.4-1.7MB 的内容,因此这里没有多少空间留给 Linux 内核以及相关的用户应用程序使用。BusyBox 揭露了这样一个事实:很多标准 Linux 工具都可以共享很多共同的元素。例如,很多基于文件的工具(比如grep和find)都需要在目录中搜索文件的代码。当这些工具被合并到一个可执行程序中时,它们就可以共享这些相同的元素,这样可以产生更小的可执行程序。实际上, BusyBox 可以将大约 3.5MB 的工具包装成大约 200KB 大小。这就为可引导的磁盘和使用 Linux 的嵌入式设备提供了更多功能。我们可以对 2.4 和 2.6 版本的 Linux 内核使用 BusyBox。

在exampls/depmod.pl放置在工具位置中。

$ depmod.pl –k ./vmlinux-2.6.29-menlow [或者使用-F System.map-2.6.29-menlow] –b $PRJROOT/images/myproject/modules-2.6.29-menlow/lib/modules/2.6.29.1-menlow  $PRJROOT/images/myproject/modules-2.6.29-menlow/lib/modules/2.6.29.1-menlow/modules.dep

重新生成modules.dep,我也将其copy到$PRJROOT/images/myproject/modules.dep-2.6.29-menlow。

使用MIC2的开发环境

在MIC2中有moblin-chroot工具,可以生成我们的开发环境,并提供模拟的target。我们在生成image的kickstart文件中直接将kernel-netbook改为kernel-menlow ,发安装的时候出现花屏现象,如果我们将netbook的img在MID上安装,可以装上,但是速度很慢,可能和CPU的适配有关系,不可以容忍。在加上各类的driver之前,我们需要在netbook版本的基础上,将kernel适配menlow芯片。

  • [wei@wei project]$ sudo moblin-chroot -s wei-kernel-chroot --unpack-only moblin-netbook-core-developer-alpha3-200905081154.usbimg //进入模拟环境
  • [wei@wei project]$ sudo moblin-chroot wei-kernel-chroot/
  • bash-3.2# alias ls="ls --color" //不习惯没有颜色的情况,修正一下
  • bash-3.2# rpm -ivh kernel-2.6.29.1-18.1.moblin2.src.rpm //解开rpm的包
  • bash-3.2# cd ~
    bash-3.2# echo %_default_patch_fuzz 2 > .rpmmacros
    在 alpha3中alpha3版本中带补丁,使用fuzz 0,出现错误:
    Patch #8 (linux-2.6.29-drm-revert.patch):
    + /bin/cat /home/wei/rpmbuild/SOURCES/linux-2.6.29-drm-revert.patch
    + /usr/bin/patch -s -p1 --fuzz=0
    -- saving rejects to file drivers/gpu/drm/i915/i915_dma.c.rej
    1 out of 1 hunk FAILED -- saving rejects to file drivers/gpu/drm/i915/i915_drv.h.rej
    error: Bad exit status from /var/tmp/rpm-tmp.JUmRvI (%prep)需要至为fuzz 2,但是在beta版本中,没有这个问题,无需此步骤 。fuzz:如果找不到这些位置,且如果 patch 命令正在应用上下文差异列表,patch 命令能进行非精确搜索。fuzz factor 指定了非精确匹配的行数目。如果模糊因子设置成 1 或者更大,patch 命令执行第二次扫描,这一次忽略上下文的第一行和最后一行。如果没有匹配结果,且最大模糊因子设置成 2 或者更大, patch 命令执行第三次扫描,这一次会忽略上下文的前两行和最后两行。(缺省模糊因子最大值为 2)。如果找不到匹配的位置,patch 命令在拒绝文件中放置块(hunk)。创建拒绝文件时,其名称和输出文件一样,只是在文件名有后缀 .rej。使用 -r 标志可以覆盖此命名约定。
  • bash-3.2# cd rpmbuild/
    bash-3.2# ls
    SOURCES  SPECS
    bash-3.2# cd SPECS/
    bash-3.2# rpmbuild -bp kernel.spec
    //打补丁
  • 生成.config的方式同交叉编译环境
  • bash-3.2# make ARCH=x86 bzImage
  • bash-3.2# make ARCH=x86 modules
  • bash-3.2# make ARCH=x86 modules_install
  • 可以通过yum来导入busybox,但是我找遍到depmod.pl,有提供depmod,但是运行的时候有报错,我还是下载了busybox的包,运行#~/bin/depmod.pl -k ./vmlinux-2.6.29-menlow -b /lib/modules/2.6.29.3-menlow/  /lib/modules/2.6.29.3-menlow/modules.dep

我试过直接使用make install来安装, make install似乎将bzImage的文件copy到/boot下面作为vmlinuz。但是想通过MIC2将其制作为img的时候,出现以下报错:

This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
tune2fs 1.41.3 (12-Oct-2008)
Setting maximal mount count to -1
Setting interval between checks to 0 seconds
Copying filesystem...
Error creating Live CD : Unable to copy valid kernels or initrds, please check the repo
Your new image can be found here:
Finished.

这个问题,需要进一步解决。在moblin中没有/etc/grub.conf文件,而/boot/grub和普通的linux长得不一样。 原因是在/boot里面没有发现initrd-文件。这个文件似乎在make modules_install的步骤中被删除。

修改时区 :

1,在/usr/share/zoneinfo/目录下查询想要更换的时区名称
2,将原有的localtime文件移走;
       # mv /etc/localtime  /etc/localtime-old
3,做新的localtime文件,将对应的时区文件链接过来
       # ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

构造嵌入式Linux(一):Kernel编译相关推荐

  1. arm linux 内核配置,嵌入式 Linux开发Kernel移植(二)——kernel内核配置和编译

    嵌入式 Linux开发Kernel移植(二)--kernel内核配置和编译 本文选择linux 2.6.35.7版本kernel进行实践. 一.linux kernel源码目录分析 Kbuild,Ke ...

  2. 嵌入式Linux的内核编译

    实验环境 VMware Workstation Player Ubuntu16.04 kernel-3.2.tar.bz2 Linux内核编译 在ubuntu上编译嵌入式Linux内核,需要大家提前安 ...

  3. 嵌入式linux编译程序,构造嵌入式Linux(一):Kernel编译

    使用交叉编译环境 建立好自己的交叉编译环境,就可以进行kernel的编译.这部分也是对O'Reilly的<Building Embeded Linux System>的第五章的一个实践.我 ...

  4. 嵌入式linux系统-Kernel串口2做交互终端

    1 驱动源码 Kernel中串口的驱动程序使用8250通用驱动,路径在: drivers/tty/serial/8250/8250_core.c drivers/tty/serial/8250/825 ...

  5. 嵌入式学习笔记之一:嵌入式linux中混合编译入门

    编译原理 编译工具将我们的源码文件最终编译成可执行文件,并不是一步到位的,其中要经过一个类似工厂流水线的过程,交叉编译工具中包含负责处理各个环节的功能工具,所以叫做交叉编译工具链. 编译的一般过程分为 ...

  6. Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具

      最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...

  7. Linux 之八 完整嵌入式 Linux 环境及构建工具、(交叉)编译工具链、CPU 体系架构

      最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...

  8. 嵌入式Linux系统基础知识

    一.嵌入式Linux系统的构成 1.硬件 2.内核 3.应用程序(形成根文件系统) 二.构建嵌入式Linux系统的主要任务 1.内核部分 2.应用程序部分 嵌入式Linux的开发大致可分为三个层次:引 ...

  9. 基于Yocto构建嵌入式Linux系统U-boot、kernel内核、rootfs文件系统

    前言 Yocto 是一个很强大的构建工具,其功能不仅仅是用来获取BSP源码和简单地编译源码,开发者还可以使用Yocto对其 开发板添加各种第三方开发库,而不需要每次重新从零开始编译源码,解决第三方依赖 ...

最新文章

  1. 通过Java代码实现图片的放大和缩小
  2. jQuery图片自动添加水印插件
  3. 在CDF可以插入特殊字符编码
  4. oracle日志备份少数据库,oracle 账号锁定日志Oracle数据库全量备份恢复和部分备份恢复...
  5. Linux实验报告常用工具开发,Linux基础入门第六节实验报告
  6. php根据位置获取经纬度(百度地图)
  7. barbuttonitem 文字换行_IOS TableView的Cell高度自适应,UILabel自动换行适应
  8. 2.5 矩阵乘法规则
  9. 升级! Facebook 模型全部迁移至 PyTorch 框架
  10. 可以用手机实现的移动端车牌识别功能
  11. vue 文件转换二进制_Vue利用Blob下载原生二进制数组文件
  12. 结对项目---万年历
  13. Java NIO 详解(一)
  14. 20200706每日一句
  15. react中可使用的video插件
  16. GG修改服务器迷你世界,gg修改器脚本大全迷你世界设置回点
  17. HTTPS证书转换成PEM格式
  18. 川师计算机类专业收分安徽,四川师范大学专业收分
  19. OnWorks-免费Windows/Linux/MAC等系统云服务器
  20. 软考高级系统架构设计师系列论文七:论基于构件的软件开发

热门文章

  1. push代码至gitee码云报错unable to access 'https://gitee.com/*/git/': The requested URL returned error: 403
  2. Qt开发总结(20)——Data Visualization
  3. 全志V853上的ARM A7和RISC-V E907是如何通信的
  4. 今年海信或将与夏普争夺全球电视机市场份额第四的位置
  5. SpringBoot(一)
  6. 关于Android数据库—realm的使用及理解
  7. Accepting the Command of the Army
  8. mac修改vmware flusion网络适配器的nat配置
  9. 理工科如何做research和survey
  10. python decimal_Python中的decimal模块执行精确的浮点运算