使用交叉编译环境

建立好自己的交叉编译环境,就可以进行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编译程序,构造嵌入式Linux(一):Kernel编译相关推荐

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

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

  2. 嵌入式系统开发:基于Linux学习笔记整理(学期汇总)

    Linux命令操作部分 Ubuntu虚拟机使用 快照 拍摄快照是为了方便还原虚拟机,因为虚拟机(Virtual Machine)是虚拟出来的出来的一台物理计算机,如果你在实验中操作不当或者其他原因导致 ...

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

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

  4. buildroot:Linux平台构建嵌入式Linux系统的框架

    buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.你可以和编译Linux内核一样,通过buildro ...

  5. 嵌入式系统开发学习步骤(Linux高级编程学习顺序)

    2019独角兽企业重金招聘Python工程师标准>>> 嵌入式系统开发学习步骤(Linux高级编程学习顺序) 1.Linux 基础 安装Linux操作系统 Linux文件系统 Lin ...

  6. Linux编译和下载嵌入式实验,嵌入式实验6交叉编译及Linux简单程序设计实验

    <嵌入式实验6交叉编译及Linux简单程序设计实验>由会员分享,可在线阅读,更多相关<嵌入式实验6交叉编译及Linux简单程序设计实验(7页珍藏版)>请在人人文库网上搜索. 1 ...

  7. 嵌入式系统开发,不用Linux的理由 !

    笔者应该可以算作国内第一批玩Linux的IT人,最早在Linux上做开发的时候,电脑市场的高端配置还是486.随着项目经验的增加,我深深的感到,在国内,对Linux还有很多误解,尤其是嵌入式开发上面, ...

  8. 外网访问arm嵌入式linux系统_嵌入式Linux系统移植的四大步骤

    最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环境没有一个深刻的认识,有时候几个简单的命 ...

  9. Atmel跑Linux的arm芯片,Atmel针对Linux的低成本嵌入式设计推出新

    Atmel针对Linux的低成本嵌入式设计推出新 来源:dengzhiyu 作者:华仔 浏览:957 时间:2016-08-10 14:18 标签: 摘要: AtmelCorporation日前宣布推 ...

最新文章

  1. 来看看顶会大佬是如何研究计算机视觉的
  2. 安卓上的微软 Edge 浏览器新增支持长截图
  3. c语言中将数组设为空,求助~~ 如何把数组变成动态输入的?
  4. [ASP.NET 控件实作 Day31] TBContextMenu 控件三种不同模式的 Click 动作
  5. 网络编程应用:基于TCP协议【实现对象传输】--练习
  6. ASP.NET 对类进行XML序列化和反序列化
  7. tushare写三因子模型
  8. Docker 数据持久化的三种方案
  9. Python练习:斐波那契数列计算 B
  10. 【移动安全基础篇】——26、两个简单app破解
  11. 计算机五笔字型编码方法,《计算机汉字输入五笔字型打字速成》汉字编码-输入.pdf...
  12. 【千锤百炼Python—14】:修改图片格式
  13. iOS设备踢出恢复模式的几种方法
  14. 智商情商哪个重要_智商和情商哪个更重要 一辩辩词
  15. Python 强制限定小数点位数
  16. 电脑桌面的快捷方式的字体有背景颜色,怎么修改?
  17. 杨超越的经历故事性太强了,现实版的娱乐圈爽文
  18. Office 如何添加Adobe Acrobat虚拟PDF打印机
  19. C++ OpenCV【人脸识别人眼识别】
  20. cgns matlab,MATLABSimulink系统建模与仿真实验报告(详细解析)(word文档良心出品).docx...

热门文章

  1. Android 常用开源框架源码解析 系列 (九)dagger2 呆哥兔 依赖注入库
  2. 2、【斯纳克图书馆管理系统】运行环境
  3. 三星 android 备忘录,便捷工具组件:三星Note S备忘录迎升级
  4. 基于华为WAC双机VRRP热备份下旁挂三层组网隧道转发模式解决方案
  5. Javaweb + MVC 实现企业人员管理系统全过程记录(配项目所有代码及数据库文件)
  6. 华中科技大学计算机科学与技术学院郑强教授,华中科技大学教授声讨后勤被处分 校方:通报批评,取消2年评优...
  7. python算式运算题目_python的四则运算练习
  8. 唐僧日记[作者:殷靖海] (一)
  9. 商丘工学院c语言试卷,商丘工学院New Radio82期:青春
  10. vue前端实现从数据库获取数据的下拉框以及带参请求