精华内容
下载资源
问答
  • 有的时候进行内核编译时,默认选项是Y,选择M编译报错。提示一些函数没有定义,主要是因为引用了外部调用的模块,编译测试时可以调用函数 EXPORT_SYMBOL_GPL()函数将变量或者函数导出到外部,编译就通过了。 ...

    有的时候进行内核编译时,默认选项是Y,选择为M就编译报错。提示一些函数没有定义,主要是因为引用了外部调用的模块,编译测试时可以调用函数
    EXPORT_SYMBOL_GPL()函数将变量或者函数导出到外部,编译就通过了。

    但是发现,将编译选项设为Y时,保持修改的代码,又会报错,提示重复定义。一般编译模块是为了调试,所以暂时就调试时编译为M形式,正式时便以为Y,放弃修改就好了,具有有啥好办法,还希望不吝赐教。先这么做吧!

    展开全文
  • arm-none-eabi-gcc (ARM architecture,no vendor,not target an operating ...用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),一般适合 ARM7、Cortex-M 和 C

    arm-none-eabi-gcc
    (ARM architecture,no vendor,not target an operating system,complies with the ARM EABI)
    用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),一般适合 ARM7、Cortex-M 和 Cortex-R 内核的芯片使用,所以不支持那些跟操作系统关系密切的函数,比如fork(2),他使用的是 newlib 这个专用于嵌入式系统的C库。

    2、arm-none-linux-gnueabi-gcc
    (ARM architecture, no vendor, creates binaries that run on the Linux operating system, and uses the GNU EABI)

    主要用于基于ARM架构的Linux系统,可用于编译 ARM 架构的 u-boot、Linux内核、linux应用等。arm-none-linux-gnueabi基于GCC,使用Glibc库,经过 Codesourcery 公司优化过推出的编译器。arm-none-linux-gnueabi-xxx 交叉编译工具的浮点运算非常优秀。一般ARM9、ARM11、Cortex-A 内核,带有 Linux 操作系统的会用到。

    3、arm-eabi-gcc
    Android ARM 编译器。

    4、armcc
    ARM 公司推出的编译工具,功能和 arm-none-eabi 类似,可以编译裸机程序(u-boot、kernel),但是不能编译 Linux 应用程序。armcc一般和ARM开发工具一起,Keil MDK、ADS、RVDS和DS-5中的编译器都是armcc,所以 armcc 编译器都是收费的(爱国版除外,呵呵~~)。

    5、arm-none-uclinuxeabi-gcc 和 arm-none-symbianelf-gcc
    arm-none-uclinuxeabi 用于uCLinux,使用Glibc。

    arm-none-symbianelf 用于symbian,没用过,不知道C库是什么 。

    Codesourcery

    Codesourcery推出的产品叫Sourcery G++ Lite Edition,其中基于command-line的编译器是免费的,在官网上可以下载,而其中包含的IDE和debug 工具是收费的,当然也有30天试用版本的。

    目前CodeSourcery已经由明导国际(Mentor Graphics)收购,所以原本的网站风格已经全部变为 Mentor 样式,但是 Sourcery G++ Lite Edition 同样可以注册后免费下载。

    Codesourcery一直是在做ARM目标 GCC 的开发和优化,它的ARM GCC在目前在市场上非常优秀,很多 patch 可能还没被gcc接受,所以还是应该直接用它的(而且他提供Windows下[mingw交叉编译的]和Linux下的二进制版本,比较方便;如果不是很有时间和兴趣,不建议下载 src 源码包自己编译,很麻烦,Codesourcery给的shell脚本很多时候根本没办法直接用,得自行提取关键的部分手工执行,又费精力又费时间,如果想知道细节,其实不用自己编译一遍,看看他是用什么步骤构建的即可,如果你对交叉编译器感兴趣的话。

    ABI 和 EABI

    ABI:二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)。在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口。

    EABI:嵌入式ABI。嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用 EABI 作为与兼容的编译器生成的汇编语言的接口。

    两者主要区别是,ABI是计算机上的,EABI是嵌入式平台上(如ARM,MIPS等)。

    arm-linux-gnueabi-gcc 和 arm-linux-gnueabihf-gcc

    两个交叉编译器分别适用于 armel 和 armhf 两个不同的架构,armel 和 armhf 这两种架构在对待浮点运算采取了不同的策略(有 fpu 的 arm 才能支持这两种浮点运算策略)。

    其实这两个交叉编译器只不过是 gcc 的选项 -mfloat-abi 的默认值不同。gcc 的选项 -mfloat-abi 有三种值 soft、softfp、hard(其中后两者都要求 arm 里有 fpu 浮点运算单元,soft 与后两者是兼容的,但 softfp 和 hard 两种模式互不兼容):
    soft: 不用fpu进行浮点计算,即使有fpu浮点运算单元也不用,而是使用软件模式。
    softfp: armel架构(对应的编译器为 arm-linux-gnueabi-gcc )采用的默认值,用fpu计算,但是传参数用普通寄存器传,这样中断的时候,只需要保存普通寄存器,中断负荷小,但是参数需要转换成浮点的再计算。
    hard: armhf架构(对应的编译器 arm-linux-gnueabihf-gcc )采用的默认值,用fpu计算,传参数也用fpu中的浮点寄存器传,省去了转换,性能最好,但是中断负荷高。

    把以下测试使用的C文件内容保存成 mfloat.c:

    include

    arm-linux-gnueabihf-gcc -v mfloat.c

    COLLECT_GCC_OPTIONS=’-v’ ‘-march=armv7-a’ ‘-mfloat-abi=hard’ ‘-mfpu=vfpv3-d16′ ‘-mthumb’
    -mfloat-abi=hard

    可看出使用hard硬件浮点模式。

    2、使用 arm-linux-gnueabi-gcc 编译:

    arm-linux-gnueabi-gcc -v mfloat.c

    COLLECT_GCC_OPTIONS=’-v’ ‘-march=armv7-a’ ‘-mfloat-abi=softfp’ ‘-mfpu=vfpv3-d16′ ‘-mthumb’
    -mfloat-abi=softfp

    可看出使用softfp模式。

    这里写图片描述

    交叉编译工具

    展开全文
  • Linux内核编译

    2014-10-31 20:48:46
    Linux内核编译的大致流程如下:   一、获取内核代码:编译内核代码之前一定要获取到内核代码,到http://www.kernel.org/下载 查询当前系统的版本号的命令:uname 切换到root用户: su   二、配置内核:内核...
    
    Linux内核编译的大致流程如下:
     
    一、获取内核代码:编译内核代码之前一定要获取到内核代码,到http://www.kernel.org/下载
    查询当前系统的版本号的命令:uname
    切换到root用户: su
     
    二、配置内核:内核代码包括有很多功能,通过配置文件,选择编译选项,实现定制内核的目的。
     
    1、内核的几种配置方式
    1. 如果.config不存在,运行make config/menuconfig时,编译器找到每个子目录下的Kconfig文件,并使用其中的缺省值生成.config文件。
    2. 如果.config存在,运行make config/menuconfig时的缺省设置即是当前.config的设置,若对设置进行了修改,.config将被更新。
    3. arch/xxx/defconfig是一个缺省的配置文件,make defconfig时会根据这个文件生成当前的.config。
    4. arch/xxx/configs文件夹中有许多命名为xxx_defconfig的配置文件,如果运行make xxx_defconfig,当前.config文件会由xxx_defconfig文件生成。
    5. make oldconfig的作用和make config类似,但是它的作用是在现有的内核设置文件基础上建立一个新的设置文件,只会向用户提供有关新内核特性的问题,在新内核升级的过程 中,make oldconfig非常有用,用户将旧的配置文件.config复制到新内核的源码中,执行make oldconfig,旧的配置文件.config会被备份,同时用户只需要回答那些针对新增特性的问题。
     一般,就用make menuconfig。
     
    2、内核编译选项
    编译选项数量众多,详细请参考《Linux内核配置参考》,反正我是直接使用默认生成的.config就可以了。不过以下建议将避免您最终得出一个不能工作的内核:
    1. 除非您使用初始化 ramdisk (initrd),否则绝不要把挂载根文件系统必需的驱动程序(硬件驱动以及文件系统驱动)编译成模块!而如果您确实使用初始化 ramdisk,请为 ext2FS 支持选项选择 Y,因为 ramdisk 使用该文件系统。您还需要 initrd 支持。

    2. 如果您系统中有网卡,将它们的驱动编译成模块。这样,您就能够在 /etc/modules.conf 中用别名定义哪一块网卡第一,哪一块第二,等等。如果您将驱动程序编译进了内核,它们加载的顺序将取决于当初它们链接进内核的顺序,而这不一定是您想要的。

    3. 最后,如果您不清楚某个选项的含义,请阅读其帮助!而如果该帮助信息依然不能解决您的困惑,请保留该选项原来的样子。(在 configoldconfig 中可以按 ? 键访问帮助。)

    配置最终结束后,请保存您的配置并退出。

    三、编译内核
    1、编译内核
    make或make bzImage
    编译好的内核文件名是bzImage,生成的文件放在arch/<cpu>/boot/目录下面。
     
    2、编译内核模块
    make moudles
     
    3、安装内核模块
     make moudles_install
    所谓安装,就是将编译好的内核模块从内核源代码目录copy到lib/modules/目录下,并根据被编译内核的版本号生成一个新的子目录。我们在做实验的时候,为了安全起见,最好备份好modules目录。
     
    四、制作Ramdisk
    首先要了解内核与ramdisk的关系:
    Linux系统在启动的过程中,需要mount根文件系统,此时除非将根文件系统涉及的所有模块全部(各种文件系统、各种块设备驱动、IDE、SATA)编译到内核文件,否则内核无法完成根文件系统的mount操作,但是如果都编译的话,内核就太大了,所以一般来说驱动/模块都驻留在根文件系统本身上/lib/modules/xxx,那么问题就来了,现在要mount根文件系统却需要根文件系统上的模块文件,怎么办?于是,就想出ramdisk,内核总是能安装ramdisk的(注:这是因为ramdisk和内核一样都是一个内存文件,也是由bootloader通过低级读写命令(如uboot用nand read,而不用通过文件系统层提供的高级读写接口)加载进内存,因此内核可以挂载内存里ramdisk文件系统),然后把所有可能需要的驱动/模块都放在ramdisk上,首先,让内核将ramdisk当作根文件系统来安装,然后再用这个根文件系统上的驱动来安装真正的根文件系统,就将这个矛盾问题解决了。
     
    1、重新制作内核映像
    mkinitrd initrd-2.6.29  2.6.29
    其中 2.6.29为/lib/modules下的目录名称
     
    将内核文件bzImage和镜像文件initrd-2.6.29一起拷贝到/boot/目录下,并将内核改名为vmlinuz-2.6.29。
    修改/etc/grub.conf文件
     
    title MyZinux (2.6.29)
        root (hd0,0)
        kernel /vmlinuz-2.6.29 ro root=UUID=e7ff8cb4-6560-4c5e-99f3-9314e10ed40d rhgb quiet
        initrd /initrd-2.6.29
     
     
    【相关知识】makefile文件:
    内核版本号由 Makefile 的第一行决定:

    $ head -4 Makefile
    VERSION = 2
    PATCHLEVEL = 6
    SUBLEVEL = 8
    EXTRAVERSION = -1mdkcustom
    

    Makefile 后面,您会发现内核版本号的组成是:

    KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
    

    所以我们可以自定义内核的版本号。做的就是更改这些域之一以定义您自己的版本号。一般只改变 EXTRAVERSION。例如您将其改为 -foo。新内核版本就会是 2.6.29-foo。
    展开全文
  • linux环境下编译工程是开发的基础。使用helloworld总结一下基础的编译方法。1.命令行法(在控制台中指定编译器直接编译)步骤如下: (1)新建hello.c并添加内容 (2)选择编译器gcc使用命令gcc hello.c -o helloworld...

    linux环境下编译工程是开发的基础。使用helloworld总结一下基础的编译方法。

    1.命令行法(在控制台中指定编译器直接编译)

    步骤如下:
    (1)新建hello.c并添加内容
    (2)选择编译器gcc使用命令gcc hello.c -o helloworld生成可执行文件helloworld
    命令行主要是指定编译器gcc,源文件名hello.c,生成的可执行文件名helloworld

    2.使用makefile

    由于一个大型的工程项目中通常包括很多的源文件和库,如果使用命令行每次编译时一行行去输命令,这样编译链接会很麻烦。那么就写成文件的形式,达到一次记录,多次使用的目的,简化编译流程。
    linux下使用makefile编译源文件的工具一般是GNU make。如果当前目录下有Makefile文件,那么直接输入make就能实现编译链接生成可执行文件。以编译helloworld为例,
    步骤如下:
    (1)新建hello.c并添加内容

    #include <stdio.h>
    int main() 
    {
        printf("Hello world!\n");
        return 0;
    }
    

    (2)新建MakeFile文件,并编辑内容MakeFile如下

    #helloworld is a binary file
    helloworld: hello.o
            gcc -o helloworld hello.o
    hello.o: hello.c
            gcc -c -o hello.o hello.c
    

    (3)在命令行输入make,可以看到当前文件夹下生成helloworld可执行文件。
    上面的MakeFile文件似乎看起来还算简单,可是语法上对于初学者来说就有点复杂了,make是一个递归创建的过程,如以上的helloworld: hello.o,使用冒号分开为目标文件:前提文件。整个流程是hello.c编译成hello.o,hello.o链接成helloworld可执行文件 helloworld。
    makefile编译的缺点:
    (1)每次都需要指定中间的文件,而我们只需要得到最后的可执行文件就行了,因此写makefile很麻烦。
    (2)makefile里面的语法较复杂,特别是一些符号,如类似于(CC)、∗∗‘(CC)、**`(CC)*`**、.SUFFIXES: .c .o 这样的宏,对于初学者很难理解。
    因此,有没有更简单的方法生成Makefile文件呢?
    使用工具cmake生成Makefile比自己直接写更加方便。

    3使用cmake生成Makefile

    若要使用cmake,需要先安装cmake。若安装成功在控制台输入cmake --version,控制台返回版本号如cmake version 2.8.7
    使用cmake生成Makefile
    步骤如下:
    (1)新建cmakehello工程文件夹
    (2)在cmakehello文件夹下新建hello.c文件
    (3)在文件夹下新建CMakeLists.txt,并添加如下内容

    cmake_minimum_required (VERSION 2.6)
    project (cmakehello)
    add_executable(cmakehello hello.c)
    

    (4)命令行编译
    在hello.c文件夹下新建文件夹build,切到build文件夹下,输入命令如下

    makedir build
    cd build
    cmake ..
    make
    

    在build文件夹下生成了cmakehello可执行文件

    (5)也可以在控制台输入cmake-gui运行cmake图形化工具编译
    a)选择源文件目录本例即hello.c所在的目录,如图where is source code选项。
    b)选择生成的中间文件(包括Makefile文件)和可执行文件的目录
    如图where to build the binaries
    这里写图片描述
    c)在CMAKE_INSTALL_PREFIX选择可执行文件安装的路径
    d)选择编译类型CMAKE_BUILD_TYPE 一般为Debug,release
    e )点击configure配置,弹出编译器类型选择界面,选择编译器类型
    f )点击generate就能在where to build the binaries目录下看到Makefile文件了
    (5)切换到此目录下输入make即完成了编译链接,可以看到文件夹下生成了cmakehello可执行文件

    展开全文
  • 准备源码: 从https://www.kernel.org/下载源码包,传入LINUX。 因为解压之后会很大,...[M]:M 菜单中的选项可以参考已有的选择来调整设置,复制boot下的config-##### 文件到源码解压目录下命名为.config即可 ...
  • 作者:YOUDI(Kevin.U)为了日常维护方便我们不选择rpm方式,而选用tar.gz方式进行安装。我们在根文件系统建立一个目录/data,存放MYSQL数据:#mkdir data添加MySQL用户与组,.#groupadd mysql#useradd -g mysql mysql...
  • Linux内核编译 ko文件

    千次阅读 2014-03-24 14:54:49
    1. make menuconfig 选择驱动为 &lt;M&gt; 2.make modules 3.查看目录即可 
  • matlab:linux环境中将m文件编译成动态链接库1. 设定编译器为gcc 先输入:mex -setup 然后选择gcc 然后输入:mbuild -setup 同样选择gcc 2. 生成链接库 (1)生成c++链接库mcc -W cpplib:libemailSend -T link:lib ...
  • iMX283编译linux源码

    千次阅读 2017-01-04 15:17:13
    1、介绍 学习嵌入式linux,工作中少不了添加各种功能、模块,这时就需要从新编译源码。 按照书本上或者网络上的教程来编译往往会遇到各种各样的问题,先总结一下配置编译linux的...(Y选择、空格清空、M编译为modu
  • 现在的嵌入式开发大部分都是ARM处理器了,从MCU级别的M0,M3,M4,M23,M33,到MPU级别的ARM9,ARM11,ARM-A5x,ARM-A7x。开发者很少去注意使用的编译器,一般都是使用的是IDE自带或者开发板(芯片)厂家提供的...
  • linux内核配置与编译

    2018-02-05 23:11:00
    配置内核:配置硬件和软件需的部分。 make config:基于文本模式的交互式配置。(一问一答) make menuconfig:基于文本模式菜单性配置...参考写好的结果文件,在这个目录下有好多已经配置好的文件linux-2.6.39\a...
  • :按空格键选中(*编译进内核,M编译成模块)或编辑参数 :退到上一级或是退出menuconfig :查看该选项的说明信息,及出处 Defined at arch/arm/Kconfig:1450 :保存选择结果,且不退到上一级或是退出menuconfi
  • 操作系统:Ubuntu 14.04.1 LTS x64 首先下载git源码包 https://www.kernel.org/pub/software/scm/git/ 这里选择最新的2.2.1 解压之后,进入源码包路径 ..../configure --prefix=/usr/local/git ...sudo m
  • Lazarus开发平台编译后可执行程序优化方法1、在“工程”菜单下,单击“工程选项”,原始状态的界面为:2、将界面中的两个选项修改为如下:3、按“确定”按钮,即可编译以后的可执行程序就将又原来的14m变为1.66m。...
  •  m:模块会被编译,但是不会被编译到内核中,只是生成.o文件,我们可以收集这些.o文件做到linux的文件系统中,然后用insmod实现动态加载。 模块加载的两种方式 1)、动态加载  动态加载是将驱动模块加载到...
  • 编译Linux内核的简单步骤

    千次阅读 2013-09-11 11:47:23
    步骤一:下载自己需要编译的内核版本,我是从www.kernel.org官网下载的;...不过命令很简单,有三种模式可以选择,我选择最简单的 make menuconfig; 步骤四:配置完成以后,就可以开始编译、安装工作了。 m
  • Compressed GNU TAR archive (tar.gz) 6.0.10-alpha 34.3M Download | Pick a mirrorMD5: ebcefbaca78299f5820794350d0025d5 |作为服务器,或者个人学习编程设计,数据库是少不了的,而且如果免费的数据库,功能也不...
  • (1)配置内核 如何配置内核 1. make config 基于文本的交互式配置 2. make menuconfig 基于文本模式的菜单型配置 使用make menuconfig ...可以用三种选择空白,*或者M,[]可以用两种选择,空白和*。 空白是不选择...
  • 内核编译过程:linux-3.0.8

    千次阅读 2017-04-24 14:37:53
    该内核是在s5pv210上跑的 1、解压linux-3.0.8,并修改Makefile  vi Makefile +195   195 ARCH ?= arm  196 CROSS_COMPILE ?= arm-none-linux-gnueabi- 2、选择soc  m
  • Linux: export CVSROOT=:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot cvs login cvs checkout mozilla/browser (其他选择:suite,xulrunner,mail 等等) 历时 资料参考: ...
  • 一、查看Linux环境在编译时我们需要区别是 64位的机器还是32位机,在Linux终端下输入如下命令uname -m就会列出是否是64位机,在选择java jdk时,我们根据此信息选择相应的 bin文件二、源码环境的搭建依赖工具 :unrar-...
  • Linux 2.6.20.x内核编译配置选项简介

    千次阅读 2009-12-03 22:47:00
    说明1:文字中的Y表示选择进内核。M表示编成模块。N表示不选择。有的只能选Y,有的只能选M。在make menuconfig 下,*表示Y,M表示M,空白表示N。make xconfig下,√ 表示Y,? 表示M,空白表示N。 说明2:菜单中,有...
  • Linux官网下载内核源码,我这里选择linux-4.4.252源码。 下载完成后,解压到/usr/src下。 2、安装编译内核必须的库: apt-get install nc libssl-dev -y apt-get install build-essential openssl -y apt-...
  • 编译内核   进入/RT288x_SDK/source目录 运行:sudo make config ...选择select the Product you wish to target  ...Ralink Products 选择 MT7620 ...Default Configurationfile 选择4M/32M(A
  • 第1 章Linux操作系统概述................... .......................................................................... 2 1.1 Linux发展历史........................................................ 2 ...
  • 在学习Linux内核移植部分,今天先在虚拟机上安装linux-3.0.8上做个双系统。内核配置:我们一般是找一个配置好的内核配置文件.config来作为配置参考步骤1.make clean/ make mrproper/make ...配置方式选择 /make m...
  • 瑞萨RZ/A2M Linux4.19系统构建与驱动移植纪实之一:BSP环境搭建我的系统信息下载RZ/A Linux-4.19 BSP编译安装带有SSL模块的Python 2.7 我的系统信息 下载RZ/A Linux-4.19 BSP 前往elinux官网,选择Renesas RZ/A系列...
  • 编译内核驱动。

    2015-03-30 14:48:02
    提示让你选择的时候,应该选择m编译模块);y(编译到内核),n(不编译); 没有编译的时候如果想在编译可以cd linux-3.0中然后输入make menuconfig ARCH=arm 将你要选择编译的驱动前加上m,然后在重新编译内核...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 246
精华内容 98
关键字:

linuxm编译选择

linux 订阅