刚开始学习嵌入式内核编译,因为要修改内核的默认配置,因此这里把自己的学习记录写下来,方便以后查阅,也给别人一个参考,有什么写的不对的或者更好的方法,请指正~

开发板有usb从口,现在想要让开发板作为一款打印机设备来被PC机识别(因为以后要用此开发板作为一款一体打印机的主控板)但是内核默认提供的usb gadget设备驱动是大容量存储设备驱动(将默认编译好的内核下载到板子里,用usb连接pc显示大容量存储设备;而且我们可以在编译好的内核文件目录/drivers/usb/gadget/下看到内核选择编译了storage.c文件,其他文件不做编译,这就是配置文件的作用了),因此这里要修改内核配置文件,重新编译内核使其作为usb从设备的打印机。

首先要将开发板的内核文件解压到任意目,然后进入内核根目录

看到内核目录下是没有默认的.config配置文件的

就需要自己去按照记得硬件平台选择配置文件,复制到根目录下即可,我在arch/arm/config目录下找到自己的配置文件

修改配置文件有三种方法,

命令:make xconfig

  • qconf: 全新的基于QT的配置接口,2.6版本内核
  • 更易使用(切记阅读 help -> introduction: useful options!)
  • 具有文件浏览功能,更易的加载配置文件

命令:make menuconfig

  • 老式字符界面,依然很管用。你够自信,完全可以手写配置文件!

命令:make oldconfig

  • 用于升级早期发布内核的配置文件
  • 对一些绝对符号(obsolete symbols)发出警告
  • 询问新符号的配置值

我用的是make menuconfig,如下。

这里我们要修改设备驱动,进入device drivers 找到usb gardet 设备驱动 将大容量存储设备修改为printer即可。

大家可以看到usb支持很多驱动,这里内核代码都已经实现,但是为了在嵌入式设备里使用,自然要裁剪内核,所以很多内容都没有安装,因此需要开发人员自己手动设置后在编译内核。我们这里选择 USB Gadget Suppot 即可

这里也可以看到内核默认支持usb从设备为大容量存储设备。

选择了作为打印机从设备后,大容量自动取消了,显然是多选一的选项。

修改后,退出,编译内核,因为是在arm板上编译,自然要选择交叉编译环境。

Make CROSS_COMPILE=arm-arago-linux-gnueabi- ARCH=arm uImage

执行这条命令后(以前没有修改配置文件,执行后自动编译内核,等十几分钟即可),但是这次终端重新提示内核配置问题,包括是否支持2TB大文件,硬件平台等等。对于硬件平台和内核知识缺乏的人确实不好选择。我试了很多次没有成功。因为我们的配置文件是写好的,只是修改了一点,为什么会出现这些问题,确实我也不懂。重新修改了很多次配置文件问题依旧,

最后得出结论就是只要是用menucpnfig或者xconfig打开了配置文件,就不能自动编译了,注意这里我编译是编译arm平台的内核。于是我试了直接编译pc机内核,make 不加任何参数,表示按照本机的硬件平台和编译器来编译,结果通过了,自动编译

因此我想到是不是我修改配置文件时也和平台有关,事实却是如此,这里显示的是x86平台的配置文件,因为我打开时没有加入ARCH=arm的参数

果然是这样,网上说的修改配置文件的命令很多是基于当前的pc硬件环境,对于我要定制到arm平台的内核裁剪来说,修改配置文件需要在命令中加入 ARCH=arm 这句话,否则修改完的配置文件是基于x86平台。我们执行Make CROSS_COMPILE=arm-arago-linux-gnueabi- ARCH=arm uImage ,make工具读取不到自己的arm平台配置文件,自然要显示内核配置选项,这就是我遇到的问题(整整5个多小时,全花在这上边了,基础还是太薄弱)。

因此我们需要重新修改下配置文件,修改的时候第一步需要这样。

Make ARCH=arm menuconfig

然后按照前文的修改定制自己的内核即可。退出,保存,Make CROSS_COMPILE=arm-arago-linux-gnueabi- ARCH=arm uImage即可。

编译开始,静等即可。

本来是很小的问题,结果花了整整一下午,基础还是最重要的~

linux交叉编译裁剪内核记录的更多相关文章

  1. linux系统裁剪

    linux系统裁剪 1.简介 最近为了更加了解linux系统的启动过程,通过对系统进行裁剪的的方式来了解整个启动流程.这里记录下过程. 2.环境介绍 vmware12 + centos6.5 + xs ...

  2. Linux系统启动那些事—基于Linux 3.10内核【转】

    转自:https://blog.csdn.net/shichaog/article/details/40218763 Linux系统启动那些事—基于Linux 3.10内核 csdn 我的空间的下载地 ...

  3. Linux 2.6内核中新的锁机制--RCU

    转自:http://www.ibm.com/developerworks/cn/linux/l-rcu/ 一. 引言 众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁 ...

  4. 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本、内核、当前时间

    申请博客有一段时间了,然而到现在还一篇没有写过..... 主要因为没有想到需要写些什么,最近在学习Python语言,照着书上看了看最基础的东西,发现根本看不进去,而且光看的话今天看了觉得都理解懂了,过 ...

  5. Linux 0.12 内核管理存储器

    Linux 0.12 内核管理存储器 其分段,用分段的机制把进程间的虚拟地址分隔开. 每一个进程都有一张段表LDT.整个系统有一张GDT表.且整个系统仅仅有一个总页表. 其地址翻译过程为: 程序中给出 ...

  6. Linux 实例常用内核网络参数介绍与常见问题处理

    本文总结了常见的 Linux 内核参数及相关问题.修改内核参数前,您需要: 从实际需要出发,最好有相关数据的支撑,不建议随意调整内核参数. 了解参数的具体作用,且注意同类型或版本环境的内核参数可能有所 ...

  7. [转帖]linux 内存管理——内核的shmall 和shmmax 参数

    (转)linux 内存管理——内核的shmall 和shmmax 参数   内核的 shmall 和 shmmax 参数 SHMMAX= 配置了最大的内存segment的大小 ------>这个 ...

  8. linux4.10.8 内核移植(三)---裁剪内核

    一.裁剪内核 1.1 第一次修改 现在的内核大小为2.8M左右,要裁剪到2.0M以下,毕竟给内核分区就只有2.0M. 这两个设备我们没有,裁剪掉. 进入make menuconfig中,搜索mouse ...

  9. Linux移植之内核启动过程start_kernel函数简析

    在Linux移植之内核启动过程引导阶段分析中从arch/arm/kernel/head.S开始分析,最后分析到课start_kernel这个C函数,下面就简单分析下这个函数,因为涉及到Linux的内容 ...

随机推荐

  1. JavaScript模块化开发一瞥

    对于那些正在构建大型应用程序,而对JavaScript不甚了解的开发者而言,他们最初必须要面对的挑战之一就是如何着手组织代码.起初只要在标记之间嵌入几百行代码就能跑起来,不过很快代码就会变得一塌糊涂… ...

  2. iOS开发——动画OC篇&知识点总结

    图层与动画知识点总结 1.Core Animation 非娱乐类的软件都会用到的动画,操作简单. 2.Quartz 2D绘图 是一个2D绘图引擎. (1) 绘图Context是一个绘图的目标对象,定义 ...

  3. IOS编程之相机和相册

    概述 IOS设备中的相机和相册,是我们在项目开发中经常会使用到的多媒体元素,使用相机可以获得最新想要的照片,而使用相册则可以访问IOS设备中的图片资源 使用IOS设备中的相机/相册获得图片资源 是否允 ...

  4. [原创]SSIS-执行包任务调用子包且子包读取父包变量

    背景:       有时候需要将一个个开发好的独立的ETL包串接起来形成一个独立而庞大的包,如:每家分公司都开发不同的ETL包,最后使用执行包任务来将这些分公司的包给串联起来形成一个独立而完整运行的E ...

  5. 史上最详细版!java文件打包成exe,在未配置安装JDK和未配置的电脑上运行--转载

    原文地址:http://funine.iteye.com/blog/2220359 (本文所有素材将在文章最后附上) 准备工具exe4j, converticon.com(用于制做.ico格式的图片) ...

  6. 遍历List remove方法,雨露均沾

    /** * 要求:去掉List中为 0 的元素 */ //创建数组和空List Integer[] ars = {1,0,0,0,5,0,8,9,0,0,0,65,3,0,0}; List<In ...

  7. iOS runtime 运行时( 二 )

    我们在编程过程中,如果使用到了runtime(运行时),我们几乎都是想动态的改变这个类的信息,包括方法,属性,balabala的,并且获得这个类的一些信息,等等,下面我们就来看看怎么通过runtime ...

  8. C# 文本框 TextChanged 延时触发

    public partial class DelayTextBox : TextBox { #region private globals private System.Timers.Timer De ...

  9. jquery 和 $

    而jQuery就是jQuery库提供的一个函数.(好像也不仅仅只是函数, 因为还有 $.ajax(options) 这样的使用,等同 jQuery.ajax(options)) 这个函数的作用是根据 ...

  10. 【Shell脚本学习7】Shell脚本学习指南分享

    http://yunpan.cn/cyARvNiaiLhfR (提取码:2878)