构造嵌入式Linux(一):Kernel编译
使用交叉编译环境
建立好自己的交叉编译环境,就可以进行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编译相关推荐
- arm linux 内核配置,嵌入式 Linux开发Kernel移植(二)——kernel内核配置和编译
嵌入式 Linux开发Kernel移植(二)--kernel内核配置和编译 本文选择linux 2.6.35.7版本kernel进行实践. 一.linux kernel源码目录分析 Kbuild,Ke ...
- 嵌入式Linux的内核编译
实验环境 VMware Workstation Player Ubuntu16.04 kernel-3.2.tar.bz2 Linux内核编译 在ubuntu上编译嵌入式Linux内核,需要大家提前安 ...
- 嵌入式linux编译程序,构造嵌入式Linux(一):Kernel编译
使用交叉编译环境 建立好自己的交叉编译环境,就可以进行kernel的编译.这部分也是对O'Reilly的<Building Embeded Linux System>的第五章的一个实践.我 ...
- 嵌入式linux系统-Kernel串口2做交互终端
1 驱动源码 Kernel中串口的驱动程序使用8250通用驱动,路径在: drivers/tty/serial/8250/8250_core.c drivers/tty/serial/8250/825 ...
- 嵌入式学习笔记之一:嵌入式linux中混合编译入门
编译原理 编译工具将我们的源码文件最终编译成可执行文件,并不是一步到位的,其中要经过一个类似工厂流水线的过程,交叉编译工具中包含负责处理各个环节的功能工具,所以叫做交叉编译工具链. 编译的一般过程分为 ...
- Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具
最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...
- Linux 之八 完整嵌入式 Linux 环境及构建工具、(交叉)编译工具链、CPU 体系架构
最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...
- 嵌入式Linux系统基础知识
一.嵌入式Linux系统的构成 1.硬件 2.内核 3.应用程序(形成根文件系统) 二.构建嵌入式Linux系统的主要任务 1.内核部分 2.应用程序部分 嵌入式Linux的开发大致可分为三个层次:引 ...
- 基于Yocto构建嵌入式Linux系统U-boot、kernel内核、rootfs文件系统
前言 Yocto 是一个很强大的构建工具,其功能不仅仅是用来获取BSP源码和简单地编译源码,开发者还可以使用Yocto对其 开发板添加各种第三方开发库,而不需要每次重新从零开始编译源码,解决第三方依赖 ...
最新文章
- 通过Java代码实现图片的放大和缩小
- jQuery图片自动添加水印插件
- 在CDF可以插入特殊字符编码
- oracle日志备份少数据库,oracle 账号锁定日志Oracle数据库全量备份恢复和部分备份恢复...
- Linux实验报告常用工具开发,Linux基础入门第六节实验报告
- php根据位置获取经纬度(百度地图)
- barbuttonitem 文字换行_IOS TableView的Cell高度自适应,UILabel自动换行适应
- 2.5 矩阵乘法规则
- 升级! Facebook 模型全部迁移至 PyTorch 框架
- 可以用手机实现的移动端车牌识别功能
- vue 文件转换二进制_Vue利用Blob下载原生二进制数组文件
- 结对项目---万年历
- Java NIO 详解(一)
- 20200706每日一句
- react中可使用的video插件
- GG修改服务器迷你世界,gg修改器脚本大全迷你世界设置回点
- HTTPS证书转换成PEM格式
- 川师计算机类专业收分安徽,四川师范大学专业收分
- OnWorks-免费Windows/Linux/MAC等系统云服务器
- 软考高级系统架构设计师系列论文七:论基于构件的软件开发
热门文章
- push代码至gitee码云报错unable to access 'https://gitee.com/*/git/': The requested URL returned error: 403
- Qt开发总结(20)——Data Visualization
- 全志V853上的ARM A7和RISC-V E907是如何通信的
- 今年海信或将与夏普争夺全球电视机市场份额第四的位置
- SpringBoot(一)
- 关于Android数据库—realm的使用及理解
- Accepting the Command of the Army
- mac修改vmware flusion网络适配器的nat配置
- 理工科如何做research和survey
- python decimal_Python中的decimal模块执行精确的浮点运算