精华内容
下载资源
问答
  • make menuconfig使用

    2020-04-30 16:15:20
    makemenuconfig 下面一栏方向键(左右键)选择和退出

    rv1109

    source buildroot/build/envsetup.sh ; 1

    cd buildroot ; make menuconfig

    查找快捷键:“/”

    下面一栏方向键(左右键)选择和退出,选择某个功能选项---y,去掉某个功能选项----n

    展开全文
  • 保留需要的部分,裁掉项目中不用的部分,可以精简系统,减小ROM和RAM的占用,Linux内核的裁剪是编译器通过.config文件确认哪些编译进内核,哪些被裁剪掉的,而.config文件是通过Menuconfig生成的。本博文就...

    目录

    0 引言

    1 Menuconfig的操作

    2 Kconfig文件

    3 .config文件

    4 Linux内核配置裁剪

    5 小结


    0 引言

    嵌入式操作系统都是可以按需裁剪的,保留需要的部分,裁掉项目中不用的部分,可以精简系统,减小ROM和RAM的占用,Linux内核的裁剪是编译器通过.config文件确认哪些编译进内核,哪些被裁剪掉的,而.config文件是通过Menuconfig生成的。本博文就Menuconfig操作和.config文件进行学习总结。

    1 Menuconfig的操作

    配置Linux内核可以使用以下命令:

    • make config——基于文本的最传统的配置界面,不推荐使用;
    • make xconfig——要求QT被安装,用的较少;
    • make gconfig——要求GTK+被安装,用的较少;
    • make menucongfig——基于文本菜单的配置界面,应用较广泛。

    在Linux源码目录下输入命令make menuconfig进入配置界面(menuconfig的实现代码在源码的scripts目录下)

    上下左右,退出保存等这些操作一看就会了,就不赘述了,看下面两个比较常用的操作:

    1)搜索:界面输入“/”,再输入关键字,输入回车;eg: /BUZZER

    2)使用空格键选择具体的驱动配置,三种状态:

    • M:编译成模块(需要再编译文件中特殊定义,暂不展开说明);
    • 空:不编译进内核;
    • *:编译进内核。

    2 Kconfig文件

    上面引言中提到了Menuconfig生成.config文件,Linux内核的裁剪是编译器通过.config文件确认哪些编译进内核,哪些被裁剪掉的,那么此处的Kconfig又是什么东西?Kconfig文件在每一级目录下都有,它是对应着内核的配置菜单,Kconfig按照一定的格式书写(也是通过脚本编写成的,了解格式,会仿写即可),Menuconfig程序读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config。

    可以看下内核源码目录下的Kconfig文件,比较简单,mainmenu 定义了主菜单的平台和内核源码,看上面的Menuconfig截图,可以对应的上。

    再看一下比较复杂的drivers驱动目录下的Kconfig,包含了所有的驱动相关的Kconfig:

    再继续看下,drivers/char/Kconfig

    可以看到,这一级一级的目录关系,都是和Menuconfig界面中对应的。我们看到一层又一层的Kconfig,是不是感觉很复杂,但是不要迷茫,Linux源码已经是将基本的都配置好了的,常用的配置也都在drivers目录下,一般也会附带配置方式的例子,脚本的语法像makefile那样,会仿照着写就可以了。

    3 .config文件

    用Menuconfig配置完后,生成的是.config文件,我们打开内核源码的.config文件,可以看到生成的该文件里面一堆宏定义。

    另外,源码目录下,我们也看到了一堆其他的config_for_xxx,这些都是针对不同操作系统或功能裁剪的已经配置好的.config文件。

    4 Linux内核配置裁剪

    这里使用上一次写的最简驱动(打印hello),体验一下配置裁剪操作,基本操作步骤:

    1)在Kconfig中添加HELLO,然后查看下Menuconfig:

    注意:tristate表示三态,编译/不编译/编译成模块,我们写完Kconfig后,在Menuconfig中看LED的就只有两种状态。

    2)查看.config文件多了HELLO

    5 小结

    本博文讲解的比较基础,我们需要熟练使用Menuconfig进行裁剪,知道怎么会仿写Kconfig文件即可,若想知道具体的语法格式,也可参照下面附的两篇参考博文中的讲解。

    【参考】:

    https://blog.csdn.net/yyyljw/article/details/100879630

    https://blog.csdn.net/yf210yf/article/details/9416045

    作于202105182030,已归档

    ———————————————————————————————————

    本文为博主原创文章,转载请注明出处!

    若本文对您有帮助,轻抬您发财的小手,关注/评论/点赞/收藏,就是对我最大的支持!

    祝君升职加薪,鹏程万里!

    展开全文
  • make menuconfig 使用技巧

    千次阅读 2019-07-01 17:48:06
    make menuconfig 使用技巧 1. 直接按行首带颜色的字母,跳转到该行: 2. 按 / 搜索对应的config flag, 可以看到对应的位置location, 也可以直接跳转过去。 不支持搜索对应的字符串描述, 不区分大小写。 如...

    make menuconfig 使用技巧

    1. 直接按行首带颜色的字母,跳转到该行:

     

    2. 按 / 搜索对应的config flag, 可以看到对应的位置location, 也可以直接跳转过去。

    不支持搜索对应的字符串描述,

    不区分大小写。

    如按/后,搜索CONFIG_FIXED_PHY,如下图,可以看到左侧(1), 按对应数字,

    展开全文
  • 使用menuconfig配置内核时对.config及内核模块的影响【使用的飞凌嵌入式板】 1.配置内核,默认的配置文件存放在linux-3.0.1\arch\arm\configs中,都是以“cpu名_defconfig”的形式命名。添加一个默认的配置文件也...

    使用menuconfig配置内核时对.config及内核模块的影响【使用的飞凌嵌入式板】

    1.配置内核,默认的配置文件存放在linux-3.0.1\arch\arm\configs中,都是以“cpu_defconfig”的形式命名。要添加一个默认的配置文件也很简单,只要将配置文件按上述形式命名放在这个configs目录下就可以了。通常我们不会直接使用make menuconfig重新制作整个linux-3.0.1\下的.config文件(即重新配置所有项,有10000多项呢),我们会先使用“make cpu_defconfig”的形式生成默认的配置文件(即将该defconfig内容写入.config),或者直接使用“mv 厂家_config .config”的命令,用厂家提供的config直接覆盖.config,并在此基础上修改成我们需要的配置。【配置的结果就是在主目录下生成一个.config文件】

     

    2.menu界面下配置内核:

    menu界面的上方我们会看到这样一段说明:

      Arrow keys navigate the menu.  <Enter> selects submenus --->.          │  

      │  Highlighted letters are hotkeys.  Pressing <Y> includes, <N> excludes, │  

      │  <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </> │  

      │  for Search.  Legend: [*] built-in  [ ] excluded  <M> module  < >

    //-------------------------------------------------翻译--------------------------------------------------------------

    用箭头键在menu中移动,回车键进入子菜单,高亮的字母是热键,按热键可以快速跳转,按Y包含选择项,按N去除选择项,按M增加模块化特征,按两次ESC退出当前菜单,按?键进入帮助界面,按/键搜索选项。[*]表示该内容被包含进内核,[]表示该内容不被包含进内核,[M]表示该内容以模块形式加载进内核。

     

    这里我们看一下在.config中所做的配置,是如何影响最终生成的内核的。我们以DM9000网卡为例说明:

    首先我们可以在生成的.config文件中看到有这样的内容CONFIG_DM9000=y

    然后通过搜索主目录下的CONFIG_DM9000,有如下一些内容:

    tanjiaqi@tanjiaqi-Vitual:~/Linux/linux-3.0.1$ grep "CONFIG_DM9000" * -nwR

    arch/arm/mach-pxa/em-x270.c:200:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/arm/mach-pxa/colibri-pxa270.c:207:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/arm/mach-pxa/cm-x300.c:218:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/arm/mach-pxa/cm-x2xx.c:63:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/arm/mach-pxa/vpac270.c:385:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/arm/mach-s3c64xx/mach-smdk6410.c:153:#ifdef CONFIG_DM9000

    arch/arm/mach-s3c64xx/mach-smdk6410.c:190:#endif //#ifdef CONFIG_DM9000

    arch/arm/mach-s3c64xx/mach-smdk6410.c:643:#ifdef CONFIG_DM9000

    arch/arm/configs/s3c2410_defconfig:244:CONFIG_DM9000=y

    arch/arm/configs/smdk6410_defconfig:831:CONFIG_DM9000=y

    arch/arm/configs/davinci_all_defconfig:71:CONFIG_DM9000=y

    arch/arm/configs/trizeps4_defconfig:109:CONFIG_DM9000=y

    arch/arm/configs/cm_x300_defconfig:68:CONFIG_DM9000=y

    arch/arm/configs/mini2440_defconfig:121:CONFIG_DM9000=y

    arch/arm/configs/colibri_pxa270_defconfig:90:CONFIG_DM9000=y

    arch/arm/configs/mx1_defconfig:56:CONFIG_DM9000=y

    arch/arm/configs/em_x270_defconfig:72:CONFIG_DM9000=y

    arch/arm/configs/zeus_defconfig:72:CONFIG_DM9000=y

    arch/arm/configs/at91sam9261_defconfig:62:CONFIG_DM9000=y

    arch/arm/configs/cm_x2xx_defconfig:80:CONFIG_DM9000=y

    arch/arm/mach-at91/board-sam9261ek.c:81:#if defined(CONFIG_DM9000)

    arch/arm/mach-at91/board-sam9261ek.c:152:#endif /* CONFIG_DM9000 */

    arch/blackfin/mach-bf527/boards/cm_bf527.c:251:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/blackfin/mach-bf527/boards/cm_bf527.c:927:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/blackfin/mach-bf527/boards/ezkit.c:345:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/blackfin/mach-bf527/boards/ezkit.c:1211:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/blackfin/mach-bf537/boards/stamp.c:182:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/blackfin/mach-bf537/boards/stamp.c:2791:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/blackfin/mach-bf533/boards/ip0x.c:35:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/blackfin/mach-bf533/boards/ip0x.c:263:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/blackfin/mach-bf533/boards/H8606.c:42: #if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/blackfin/mach-bf533/boards/H8606.c:411:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

    arch/blackfin/configs/IP0X_defconfig:61:CONFIG_DM9000=y

    arch/blackfin/configs/H8606_defconfig:52:CONFIG_DM9000=y

    drivers/net/Makefile:256:obj-$(CONFIG_DM9000) += dm9000.o

    FORLINX6410_CFG:831:CONFIG_DM9000=y//我们使用的是飞凌提供的板卡,很明显//这个就是厂家提供给我们的配置文件

    include/generated/autoconf.h:517:#define CONFIG_DM9000 1

    include/config/auto.conf:517:CONFIG_DM9000=y

    include/config/tristate.conf:196:CONFIG_DM9000=Y

     

    从上面我们可以看出,配置项CONFIG_DM9000出现在以下一些文件中:

    arm架构的源文件中

    configs目录下的默认配置文件或厂家配置文件中

    ③驱动文件夹子目录下的makefile

    include/generated/autoconf.h

    include/config/auto.conf

    显然arm架构的源文件中出现的宏CONFIG_DM9000的定义来源于include/generated/autoconf.h文件,其实在.config中配置的所有my属性的选项,在include/generated/autoconf.h中都会以宏定义的形式出现,且宏的值都被定义为1,这个autoconf.h文件是根据.config中的配置自动生成的。既然在autoconf.h文件中我们无法区分

    my属性,那么我们就需要在子目录下的makefile中区分,在makefile文件中,我们有

    obj-$(CONFIG_DM9000) += dm9000.o,替换掉makefile中的变量引用,根据配置的不同,有obj-y += dm9000.oobj-m += dm9000.o两种情况【如果CONFIG_DM9000没有定义,则为空,会出现obj- += dm9000.o

    makefile并不会处理变量obj-】,而obj-y最终会以dm9000.o的形式编译到内核里面去,而obj-m的内容最终则会编译成dm9000.ko作为模块加载到内核当中。而对于子目录makefile中的变量CONFIG_DM9000则是由auto.conf中定义,而auto.conf文件则是由.config中的配置生成,此外,auto.conf会被顶层的makefile包含来影响内核的生成。

    因此,综上所述,根据.config配置会自动生成autoconf.hauto.conf两个文件,autoconf.h会被所有的源代码调用,而auto.conf则被所有的Makefile使用。

    3.Linux内核的Makefile分析,如果想对linux内核的Makefile有个比较全面的了解,建议阅读一下linux-3.0.1\Documentation\kbuild\makefiles.txt中文版本翻译

    我们先讲解一下子目录下面的Makefile这里我就以/linux-3.0.1/drivers下的Makefile为起始,来简单介绍一下各个目录下Makefile的构成(具体语法我们就不展开来讲了,请自行去阅读上面的英文介绍或者中文翻译)。

    在/linux-3.0.1/drivers下的Makefile中有:

    obj-y += gpio/    //这种是表示将访问当前目录下的gpio目录,并根据

    //配置在gpio目录下的Makefile中选择内容添加到内核

    而在linux-3.0.1/drivers/gpio中的Makefile里有:

    obj-$(CONFIG_GPIOLIB) += gpiolib.o //表示我们会根据CONFIG_GPIOLIB变量的值

    //选择不同的编译方式:

    //y:编译进内核(.o) m:编译成模块(.ko)

    此外,如果有复合文件,在老版本中,会以如下形式编译进内核,

    obj-y += gpio.o //gpio.o将被编译到内核中,但它又是由

    gpio-objs := a.o b.o //a.o b.o生成

    在新版本的linux中,做法如下:

    obj-y += isdn.o

    isdn-y := isdn_net_lib.o isdn_v110.o isdn_common.o

     

    接下来我们直接分析顶层目录下的Makefile,依次展开来理清linux内核源码包的结构。

    顶层目录下Makefile中有:

    ARCH ?= arm

    SRCARCH  := $(ARCH)

     

    init-y := init/

    drivers-y := drivers/ sound/ firmware/

    net-y := net/

    libs-y := lib/

    core-y := usr/

     

    -include include/config/auto.conf //.config生成

    all: vmlinux //顶层Makefile的第一个目标

    //…

    include $(srctree)/arch/$(SRCARCH)/Makefile //包含了架构的Makefile

    core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/

     

    init-y := $(patsubst %/, %/built-in.o, $(init-y)) //init-y = init/ built-in.o

    core-y := $(patsubst %/, %/built-in.o, $(core-y)) // core-y= usr/ built-in.o

    // kernel/ built-in.o

      //mm built-in.o

    //fs/ built-in.o

    // ipc/ built-in.o

    // security/ built-in.o

    // crypto/ built-in.o

    // block/ built-in.o

    drivers-y := $(patsubst %/, %/built-in.o, $(drivers-y)) // drivers-y= drivers/ built-in.o

    // sound/ built-in.o

    // firmware/ built-in.o

    net-y := $(patsubst %/, %/built-in.o, $(net-y)) // net-y= net/ built-in.o

    libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))

    libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y))

    libs-y := $(libs-y1) $(libs-y2) // libs-y= lib/ lib.a lib/ built-in.o

     

    vmlinux-init := $(head-y) $(init-y)

    vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y)

    vmlinux-all  := $(vmlinux-init) $(vmlinux-main)

    vmlinux-lds  := arch/$(SRCARCH)/kernel/vmlinux.lds

    vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) vmlinux.o $(kallsyms.o) FORCE

    ifdef CONFIG_HEADERS_CHECK

    $(Q)$(MAKE) -f $(srctree)/Makefile headers_check

    endif

    ifdef CONFIG_SAMPLES

    $(Q)$(MAKE) $(build)=samples

    endif

    ifdef CONFIG_BUILD_DOCSRC

    $(Q)$(MAKE) $(build)=Documentation

    endif

    $(call vmlinux-modpost)

    $(call if_changed_rule,vmlinux__)

    $(Q)rm -f .old_version

    arch/arm/Makefile中有:

    head-y := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o

    zImage Image xipImage bootpImage uImage: vmlinux

    $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@

    在链接生成vmlinux时,我们使用的链接脚本是/linux-3.0.1/arch/arm/kernel/vmlinux.lds,但是在未经makelinux源码包中我们找不到这样一个文件,只能找到/linux-3.0.1/arch/arm/kernel/vmlinux.lds.S文件,显然前面那个链接脚本就是根据这个文件生成的。

    展开全文
  • 【背景】之前折腾过:linux内核中的 make menuconfig和后来的交叉编译方面,crosstool-ng的ct-ng menuconfig:【记录】crosstool-ng-1.18.0中配置xscale【记录】Ubuntu下更新crosstool-ng的menuconfig配置什么是...
  • menuconfig

    2013-07-23 12:59:26
    转自:http://en.wikipedia.org/wiki/Menuconfig From Wikipedia, the free encyclopedia This article has multiple issues. Please help improve it or discuss these issues on ...
  • MTK 如何使用make menuconfig

    千次阅读 2016-11-22 09:40:47
    配置kernel部分是使用kernel的原生命令make menuconfig即可,但不同的软件版本稍有差别 [KEYWORD] menuconfig kernel [SOLUTION] ${project name}为工程名 ICS/GB版本请在alps代码目录下shell: ./mk ${project ...
  • linux下使用menuconfig需要安装如下库

    千次阅读 2017-04-20 14:41:04
    sudo apt-get install build-essential  sudo apt-get install libncurses5  sudo apt-get install libncurses5-dev
  • 今天使用快速命令默认配置编译内核。 1.在内核根目录下输入命令: sudo make menuconfig 2.执行第一步后会弹出如下配置界面 3.在选择之前说一下内核配置前面一些符号代表意思(如何下图红色框中的*,M,) [* ]:...
  • make menuconfig使用-4

    2021-06-08 19:24:09
    make menuconfig使用 1.怎么进入到make menuconfig图形化界面? 首先进入到内核源码的路径下,然后输入make menuconfig即可打开这个界面。 2.make menuconfig图形化界面的操作。 1. 搜索功能 输入""/""即可弹出...
  • make menuconfig配置完以后, make savedefconfig 然后拷贝当前目录的defconfig到arch/arm64/configs/firefly_defconfig
  • 在配置的时候我打开menuconfig 看,只查到了OF_RESERVED_MEM =Y 不知道这个到底是打开了还是关闭了reserved mem功能,现在我编译好的uImage烧尽开发板不能正常运行,与正常流程相对比就缺少了reserved memory这一步...
  • menuconfig问题

    2019-10-12 10:14:03
    1、无法启动menuconfig sudo apt-get install libncurses5-dev
  • 在Linux内核文件夹中使用命令make menuconfig,出现如下情况: topeet@ubuntu:~/android4.0/iTop4412_Kernel_3.0$ make menuconfig *** Unable to find the ncurses libraries or the *** required header files. ...
  • 使用树莓派编译内核时,报以下错误:     只需要安装ncurses5即可,选择在线安装。 sudo apt-get install libncurses5-dev 尝试离线安装,将 libncurses5源码下载,下载地址: ......
  • Make Menuconfig

    2017-11-06 15:51:24
    make menuconfig 图形化的内核配置make mrproper —–删除不必的文件和目录.#make config(基于文本的最为传统的配置界面,不推荐使用) #make menuconfig(基于文本选单的配置界面,字符终端下推荐使用) #make ...
  • make menuconfig

    2019-03-15 20:14:13
    make menuconfig 在嵌入式领域当中,在配置内核的时候会有很多配置方法,比如说make config(基于文本的为传统的配置...Xwindow下推荐使用)、make menuconfig(基于文本选择的配置界面,字符终端下推荐使用),以...
  • 在配置内核时使用make menuconfig 出现以下错误: ***'make m'
  • 使用自己的make menuconfig

    千次阅读 2007-12-24 22:35:00
    习惯用简单的makefile来做自己的工程,最近突然心血来潮,决定使用make menuconfig来配置自己的程序。 全部自己去写,那太不现实了,改用别人的倒是很简单, ncurses部分直接改自buildroot的(他也是改自kernel的)...
  • 遇到的问题:因为刚下了linux-3.16.1的内核,无法make menuconfig,就无法去编译 解决方法: 第一步: 去ncurses官网:http://ftp.gnu.org/pub/gnu/ncurses/  下载的版本是ncurses-6.0.tar.gz  第二步: ...
  • 2.15.5.1、使用说明解释 (1)make ,menuconfig中本身自带的提示就有所有的用法,这里只要全部理解就可以了。 (2)menuconfig中间的选择区中有很多个选择项,每个选择项对应.config文件中的一个配置项,每一个选择项都...
  • 新安装的ubuntu 出现不能使用make menuconfig时 1、sudo apt-get update 更新软件2、安装下面的软件 sudo apt-get install build-essential sudo apt-get install libncurses5 sudo apt-get install ...
  • 在ubuntu16.04中编译内核时,使用make menuconfig发生错误,提示没有安装ncurses-devel。 分析过程: 使用 sudo apt install ncurses-devel命令安装该库,没有,然后又使用sudo apt install ncurses,还是没有该库。...
  • make menuconfig例子

    2007-12-24 22:25:57
    把buildroot里的make menuconfig那部分ncurses抠出来,自己 使用make menuconfig配置自己的工程,可以用来玩玩
  • RT-Thread ENV工具,有menuconfig,类似于Linux开发的menuconfig,可以图形菜单配置【宏】。 C、C++开发中,【宏】作用强大,给编程带来很大的便利。 Kconfig 【宏】的具体内容,一般为:字符串、数值。 ...
  • 在 ubuntu 下初次使用 make menuconfig 配置 linux 内核时, 会报错。ubuntu 下默认是没有安装该命令所依赖的库的。需要自己安装一下。 $sudo apt-get -y install aptitude $sudo aptitude -y install ncurses-dev ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,838
精华内容 15,535
关键字:

要使用menuconfig