为什么在makekernel menuconfigg中修改kernel启动的CMDLINE不管用

Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
你可能喜欢linux系统替换新内核(编译安装替换与打包替换)
内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。
本文将以kernel 3.12.5版本为实验,操作平台为RedHat 6.2,但本文所介绍的内核编译与安装方法适合大多数Linux系统(包括RedHat、Ubuntu、Debian等)。
二、下载新内核源码
内核下载官网:https://www.kernel.org/
解压内核:#tar xvf linux-3.12.5.tar.xz /opt
进入内核源码目录:#cd /opt/linux-3.12.5
这里解压到任何目录都行,本人解压到了/opt目录下。在网上看到很多朋友解压到/usr/src目录下,其实这都无所谓,因为本文所讲的方法并不局限于给本机新增一个内核,还有可能是给其他机器的新增内核,就算是新增本机内核那也没关系,因为后面执行#make install 自动就会将对应文件拷贝到本机相应的目录下去了。
注:下文所有关于颜色标注的&3.12.5&都替换成自己实际的内核版本号。
三、替换内核
本文介绍两种替换内核方法:编译替换内核、打包替换内核(.deb安装包)。
(一)编译替换内核
编译替换内核适合所有Linux系统,也是大多数人常用的方法。
1、定制内核
#make mrproper
作用是在每次配置并重新编译内核前需要先执行&make mrproper&命令清理源代码树,包括过去曾经配置的内核配置文件&.config&都将被清除。即进行新的编译工作时将原来老的配置文件给删除到,以免影响新的内核编译。
即检查有无不正确的.o文件和依赖关系,如果使用刚下载的完整的源程序包即第一次进行编译,那么本步可以省略。而如果你多次使用了这些源程序编译内核,则最好要先运行一下这个命令。
#make menuconfig
注:使用make menuconfig 生成的内核配置文件,决定将内核的各个功能系统编译进内核还是编译为模块还是不编译。
在这里就不介绍具体的内核配置操作,但是建议就算不打算配置什么也执行一下make menuconfig这个命令,因为如果不执行此操作的话在后面make编译内核的时候会提示你回答很多问题。
内核配置可参考:
Make menuconfig配置详解:http://blog.csdn.net/xuyuefei1988/article/details/8635539
配置内核还有很多其他方法,主要区别如下:
#make menuconfig //基于ncurse库编制的图形工具界面
#make config //基于文本命令行工具,不推荐使用
#make xconfig //基于X11图形工具界面
#make gconfig //基于gtk+的图形工具界面
这里选择简单的配置内核方法,即make menuconfig。在终端输入make menuconfig,等待几秒后,终端变成图形化的内核配置界面。进行配置时,大部分选项使用其缺省值,只有一小部分需要根据不同的需要选择。
对每一个配置选项,用户有三种选择,它们分别代表的含义如下:
&*&或[*]&&将该功能编译进内核
[ ]&&不将该功能编译进内核
[M]&&将该功能编译成可以在需要时动态插入到内核中的代码
2、编译安装内核和模块
(1) 拷贝.confg文件:
执行#cp /boot/config-,然后按下Tab键,系统会自动填上该目录下符合条件的文件名,然后继续输入 .config,目的是使用在boot目录下的原配置文件。
不执行这一步的话,后面make的时候会提示找不到.confg文件。
如果在上一步配置了内核的话应该是会自动生成.config文件,但这里本人只是执行了一次#make menuconfig命令并没有配置内核。
(2) 建立编译时所需的从属文件:
根据上一步所选择的选项,建立文件的依赖关系。
(3) 清除内核编译的目标文件 :
#make clean
清理一些不必要的文件,如果你在上次编译的基础上,删去了一些选项,建议你执行这一步操作,否则,就没有必要了。
(4) 编译安装内核和模块:
【本机替换内核】
1)编译内核和模块:
生成内核模块和vmlinuz,initrd.img,Symtem.map文件。
注:#make相当于分别执行#make bzImage 和#make modules,由于是本机替换内核,所以无需分开执行。
这一步所需的时间较长,为了加快编译速度,我们可以加上&-j&选项,后面跟的数字是jobsnum ,建议设置为 CPU 核心数 + 1,jobsnum值可以由命令& cat /proc/cpuinfo |sed -n '/^processor/p' |wc -l&获得。
2)安装模块:
#makemodules_install
编译成功后,系统会在/lib/modules目录下生成一个3.12.5子目录,里面存放着新内核的所有可加载模块(即将编译好的modules拷贝到/lib/modules下)。
3)安装内核:
#makeinstall
即复制.config,vmlinuz,initrd.img,System.map文件到/boot目录、更新grub。对于RedHat系统以下三个grub文件自动会更新,默认启动新内核。
/etc/grub.conf
/boot/grub/menu.lst
/boot/grub/grub.conf
注:前两个配置文件是第三个的软连接。
Ubutun和Debian系统是/boot/grub/grub.conf文件。
4)重启系统:
【非本机替换内核】
在这里也可以像本机替换内核一样直接执行#make,但本文将编译内核和编译模块分开来执行,但原理和结果是一样的。
1)编译内核:
#make bzImage
内核编译成功后,会在源码树根目录即linux-3.12.5/arch/x86_64/boot/目录中生成一个新内核的映像文件bzImage。
注:对于大内核(比如需要SCSI支持),make bzImage (推荐)
对于小内核,make zImage。
2)编译模块:
#make modules
编译可加载模块(即内核选项中选择为M的选项),以便将来使用insmod命令进行加载。编译时间跟M选项的数量有关。
3)安装模块:
#make modules_install
即将编译好的modules拷贝到/lib/modules下。
4)安装内核:
由于不是本机替换内核,所以我们需要将新生成的内核文件拷贝到要替换内核的机器上。需要拷贝的内核文件为主要有4个,分别是:.config,bzImage,System.map 和系统/lib/modules/linux-3.12.5目录。
具体操作如下:
(1)将生成的linux-3.12.5/.config 拷贝到要替换内核系统的/boot下,并重命名为config-3.12.5
(2)将生成的linux-3.12.5/arch/x86-64/boot/bzImage 拷贝到要替换内核系统的/boot下,并重命名为vmlinuz-3.12.5(注:这里需特别注意拷贝后的文件名变为vmlinuz-x.x.x)。
(3)将生成的linux-3.12.5/System.map 拷贝到要替换内核系统的/boot下,并重命名为System.map-3.12.5
(4)将make modules_install生成的系统目录/lib/modules/linux-3.12.5 拷贝到要替换内核系统的/lib/modules下。
(5)在要替换新内核的系统的/lib/modules目录下执行以下命令:
#update-initramfs-c -k3.12.5,生成/boot/initrd.img-3.12.5
#update-grub(或#update-grub2), 更新启动加载文件。
注:RedHat系统貌似是没有以上两个更新命令,所以以上更新内核方法适合Ubuntu或Debian系统。
那RedHat系统怎么更新内核呢?建议使用上一种【本机替换内核】方法直接make install安装,使用【非本机替换内核】方法不太方便,但这里也做一个介绍,我们可以手动更新内核启动文件。(当然你也可以手动一个grub安装包并安装,再使用update-grub)。
具体如下(将第(5)步替换成下面操作):
RedHat系统中有三个配置文件/etc/grub.conf;/boot/grub/menu.lst;/boot/grub/grub.conf
前两个都是第三个的连接,所以我们只需要修改/boot/grub/grub.conf启动配置文件即可。
内容如下:
title 显示在启动菜单上的名称
root 根文件系统挂载分区,根据自身系统而定,可以仿照旧版本内核填写。
kernel 压缩过的内核文件名
initrd 根文件系统文件名
titleMy new kernel
root (hd0,0)
kernel/boot/vmlinuz-x.y.z
initrd/boot/initrd-x.y.z.img
在红帽系统上直接修改grub启动文件的方法本人没有亲试,这部分内容是参照文章/view/cb16a8fdc8d376eeaeaa3126.所写的,具体的可以看原文。
本人的/boot/grub/grub.conf中新增内核内容如下:
title Red Hat Enterprise Server (3.12.5)
root (hd0,0)
kernel /vmlinuz-3.12.5 orroot=/dev/&&
initrd /initramfs-3.12.5.img
然后重新生成ram磁盘:
如果您的系统中的/etc/lilo.conf没有使用了ram磁盘选项initrd,略过
如果您的系统中的/etc/lilo.conf使用了ram磁盘选项initrd,
使用mkinitrd initrd-内核版本号 内核版本号命令重新生成ram磁盘文件,例如我的Redhat 6.2:
mkinitrd initrd-3.12.5 3.12.5
之后把/etc/lilo.conf中的initrd指向新生成的initrd-3.12.5文件:
initrd=/boot/initrd-3.12.5
ram磁盘能使系统性能尽可能的优化,具体参考/usr/src/linux/Documents/initrd.txt文件
5)重启系统:
3、几个重要的Linux内核文件介绍
(1).config
使用make menuconfig 生成的内核配置文件,决定将内核的各个功能系统编译进内核还是编译为模块还是不编译。
(2)vmlinuz 和 vmlinux
vmlinuz是可引导的、压缩的内核,&vm&代表&Virtual Memory&。Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制,Linux能够使用硬盘空间作为虚拟内存,因此得名&vm&。
vmlinuz是可执行的Linux内核,vmlinuz的建立有两种方式:
一是编译内核时通过&make zImage&创建,zImage适用于小内核的情况,它的存在是为了向后的兼容性;
二是内核编译时通过命令make bzImage创建,bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示&big zImage&,bzImage中的b是&big&意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码,所以你不能用gunzip 或 gzip &dc解包vmlinuz。内核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。 vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。
(3)initrd.img
initrd是&initial ramdisk&的简写。
initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。比如initrd- 2.4.7-10.img主要是用于加载ext3等文件系统及scsi设备的驱动。如果你使用的是scsi硬盘,而内核vmlinuz中并没有这个 scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题,initrd-2.4.7-10.img是用gzip压缩的文件。initrd映象文件是使用mkinitrd创建的,mkinitrd实用程序能够创建initrd映象文件,这个命令是RedHat专有的,其它Linux发行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd
(4)System.map是一个特定内核的内核符号表,由&nm vmlinux&产生并且不相关的符号被滤出。
下面几行来自/usr/src/linux-2.4/Makefile:
nm vmlinux | grep-v '(compiled)|(.o$$)|( [aUw] )|(..ng$$)|(LASH[RL]DI)' | sort &System.map
在进行程序设计时,会命名一些变量名或函数名之类的符号。Linux内核是一个很复杂的代码块,有许许多多的全局符号, Linux内核不使用符号名,而是通过变量或函数的地址来识别变量或函数名,比如不是使用size_t BytesRead这样的符号,而是像c0343f20这样引用这个变量。 对于使用计算机的人来说,更喜欢使用那些像size_t BytesRead这样的名字,而不喜欢像c0343f20这样的名字。内核主要是用c写的,所以编译器/连接器允许我们编码时使用符号名,而内核运行时使用地址。 然而,在有的情况下,我们需要知道符号的地址,或者需要知道地址对应的符号,这由符号表来完成,符号表是所有符号连同它们的地址的列表。
Linux 符号表使用到2个文件: /proc/ksyms 、System.map 。/proc/ksyms是一个&proc file&,在内核引导时创建。实际上,它并不真正的是一个文件,它只不过是内核数据的表示,却给人们是一个磁盘文件的假象,这从它的文件大小是0可以看 出来。然而,System.map是存在于你的文件系统上的实际文件。当你编译一个新内核时,各个符号名的地址要发生变化,你的老的System.map 具有的是错误的符号信息,每次内核编译时产生一个新的System.map,你应当用新的System.map来取代老的System.map。
虽然内核本身并不真正使用System.map,但其它程序比如klogd, lsof和ps等软件需要一个正确的System.map。如果你使用错误的或没有System.map,klogd的输出将是不可靠的,这对于排除程序故障会带来困难。没有System.map,你可能会面临一些令人烦恼的提示信息。 另外少数驱动需要System.map来解析符号,没有为你当前运行的特定内核创建的System.map它们就不能正常工作。 Linux的内核日志守护进程klogd为了执行名称-地址解析,klogd需要使用System.map。System.map应当放在使用它的软件能够找到它的地方。执行:man klogd可知,如果没有将System.map作为一个变量的位置给klogd,那么它将按照下面的顺序,在三个地方查找System.map: /boot/System.map 、/System.map、/usr/src/linux/System.map
System.map也有版本信息,klogd能够智能地查找正确的映象(map)文件。
(二)打包替换内核
打包替换新内核使用的是make-kpkg命令,所以此方法只适合支持make-kpkg命令的系统版本,一般适合Ubuntu、Debian等系统,不适合RedHat系统。
1、定制内核
#make mrprobe ,清理源代码树。
#make menuconfig ,配置内核。
2、打包内核
(1)拷贝.confg文件:
执行#cp /boot/config-,然后按下Tab键,系统会自动填上该目录下符合条件的文件名,然后继续输入 .config,目的是使用在boot目录下的原配置文件。
不执行这一步的话,后面make的时候会提示找不到.confg文件。
如果在上一步配置了内核的话应该是会自动生成.config文件,但这里本人只是执行了一次#make menuconfig命令并没有配置内核。
(2)编译打包内核
#make-kpkg --initrd - -append-to-version=-pyh - -revision=zxxiong.0716 -j 4kernel_image kernel_headers
执行完以上命令后将在上一级目录生成两个.deb包:
头文件包:linux-headers-3.12.5-pyh_zxxiong.0716_amd64.deb
内核包:linux-image-3.12.5-pyh_zxxiong.0716_amd64.deb
【--initrd】选项会让make-kpkg自动帮我们生成initramfs;
【--revision】会给生成的deb文件加上一个版本信息。这个参数只是影响到文件名,如果不指定,默认会是&10.00.Custom&;
【--append-to-version】也是一种版本信息,它不仅出现在deb安装包的文件名里,也会影响到kernel的名称,比如本例中,内核更新完成之后,用&uname -r&察看会得到&3.12.5-pyh&;
【kernel_image】表示生成内核和默认模块的安装包。
【kernel_headers】这样make-kpkg会生成一个内核头文件的安装包。
如果我们用普通用户来执行make-kpkg,需要加上fakeroot运行
#fakeroot make-kpkg --initrd - -append-to-version=-pyh - -revision=zxxiong.0716 -j 4 kernel_image kernel_headers
(注:需要设置平台 如-amd64在这里配置文件已经默认配置了,所以这里不用加,选项kernel_image是生成内核.deb包,选项kernel_headers是生成头文件.deb包,这两个选项可以只使用一个)
(3)安装内核
将上面生成的.deb包拷贝到需要替换内核的机器上,执行以下命令:
#dpkg &i linux-headers-3.12.5-pyh_zxxiong.0716_amd64.deblinux-image-3.12.5-pyh_zxxiong.0716_amd64.deb (接上一行)
或者直接在deb包所在目录执行:#dpkg &i ./*.deb
执行命令之后则会自动更新/boot目录下的文件(即自动执行命令:# update-initramfs -c -k3.12.5 和#update-grub2),然后重启系统并选定加载的内核就可以了,还可以修改/boot/grub/grub.cfg配置文件中的 set default=&0&, 默认为0,安装完后查看该文件新加载的内核是第几项就设置为几(从0开始),这样则不需要在开机时选择启动第几项了。
(5) 重启系统
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'【记录】尝试分析Buildroot在make menuconfig后make时的内部执行逻辑
期间,需要去分析Buildroot的make的逻辑。
对于Buildroot在make menuconfig后,(又去make clean了一下,然后)去make,此时的输出是:
CLi@PC-CLI-1 ~/develop/buildroot/buildroot-2013.05
/usr/bin/make -j4
HOSTCC=&/usr/bin/gcc& HOSTCXX=&/usr/bin/g++& silentoldconfig
make[1]: Entering directory `/home/CLi/develop/buildroot/buildroot-2013.05'
mkdir -p /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/lxdialog
/usr/bin/make CC=&/usr/bin/gcc& HOSTCC=&/usr/bin/gcc& obj=/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config -C support/kconfig -f Makefile.br conf
make[2]: Entering directory `/home/CLi/develop/buildroot/buildroot-2013.05/support/kconfig'
/usr/bin/gcc -I/usr/include/ncursesw -DCURSES_LOC=&&ncursesw/curses.h&&
-DNCURSES_WIDECHAR=1 -DLOCALE -DKBUILD_NO_NLS -I/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config -DCONFIG_=\&\&
-MM *.c & /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/.depend 2&/dev/null || :
make[2]: Leaving directory `/home/CLi/develop/buildroot/buildroot-2013.05/support/kconfig'
make[2]: Entering directory `/home/CLi/develop/buildroot/buildroot-2013.05/support/kconfig'
/usr/bin/gcc -I/usr/include/ncursesw -DCURSES_LOC=&&ncursesw/curses.h&&
-DNCURSES_WIDECHAR=1 -DLOCALE -DKBUILD_NO_NLS -I/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config -DCONFIG_=\&\&
-c conf.c -o /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/conf.o
/usr/bin/gcc -I/usr/include/ncursesw -DCURSES_LOC=&&ncursesw/curses.h&&
-DNCURSES_WIDECHAR=1 -DLOCALE -DKBUILD_NO_NLS -I/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config -DCONFIG_=\&\&
-I. -c /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/zconf.tab.c -o /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/zconf.tab.o
In file included from /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/zconf.tab.c:2500:0:
./confdata.c: In function ‘conf_split_config’:
./confdata.c:849:6: warning: assignment makes pointer from integer without a cast [enabled by default]
/usr/bin/gcc -I/usr/include/ncursesw -DCURSES_LOC=&&ncursesw/curses.h&&
-DNCURSES_WIDECHAR=1 -DLOCALE -DKBUILD_NO_NLS -I/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config -DCONFIG_=\&\&
/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/conf.o /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/zconf.tab.o
-o /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/conf
rm /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/zconf.tab.c
make[2]: Leaving directory `/home/CLi/develop/buildroot/buildroot-2013.05/support/kconfig'
BR2_DEFCONFIG='' KCONFIG_AUTOCONFIG=/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/auto.conf KCONFIG_AUTOHEADER=/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/autoconf.h KCONFIG_TRISTATE=/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/tristate.config BUILDROOT_CONFIG=/home/CLi/develop/buildroot/buildroot-2013.05/.config /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/conf --silentoldconfig Config.in
make[1]: Leaving directory `/home/CLi/develop/buildroot/buildroot-2013.05'
mkdir -p /home/CLi/develop/buildroot/buildroot-2013.05/output/target
rsync -a \
--exclude .empty --exclude .svn --exclude .git \
--exclude .hg --exclude=CVS --exclude '*~' \
/home/CLi/develop/buildroot/buildroot-2013.05/system/skeleton/ /home/CLi/develop/buildroot/buildroot-2013.05/output/target/
cp support/misc/target-dir-warning.txt /home/CLi/develop/buildroot/buildroot-2013.05/output/target/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM
touch /home/CLi/develop/buildroot/buildroot-2013.05/output/build/.root
&&& host-ccache 3.1.8 Extracting
bzcat /home/CLi/develop/buildroot/buildroot-2013.05/dl/ccache-3.1.8.tar.bz2 | tar --strip-components=1 -C /home/CLi/develop/buildroot/buildroot-2013.05/output/build/host-ccache-3.1.8
&&& host-ccache 3.1.8 Patching package//ccache
&&& host-ccache 3.1.8 Updating config.sub and config.guess
for file in config.guess config. do for i in $(find /home/CLi/develop/buildroot/buildroot-2013.05/output/build/host-ccache-3.1.8 -name $file); do cp support/gnuconfig/$file $i; done
&&& host-ccache 3.1.8 Patching libtool
&&& host-ccache 3.1.8 Configuring
(cd /home/CLi/develop/buildroot/buildroot-2013.05/output/build/host-ccache-3.1.8/ && rm -rf config. PATH=/home/CLi/develop/buildroot/buildroot-2013.05/output/host/bin:/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/bin:/home/CLi/develop/crosstool-ng/x-tools/arm-xscale-linux-gnueabi/bin:/opt/crosstool-ng/bin:/home/CLi/develop/crosstool-ng/x-tools/armxscalecurl/bin:/usr/local/bin:/usr/bin:/cygdrive/d/tmp/dev_install_root/Python27_x64:/cygdrive/d/tmp/dev_install_root/Python27_x64/Lib/site-packages/PyQt4:/cygdrive/d/tmp/dev_install_root/Perl64/site/bin:/cygdrive/d/tmp/dev_install_root/Perl64/bin:/cygdrive/c/Program Files/Common Files/Microsoft Shared/Windows Live:/cygdrive/c/Program Files (x86)/Common Files/Microsoft Shared/Windows Live:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0:/cygdrive/c/Program Files (x86)/Microsoft SQL Server/100/Tools/Binn:/cygdrive/c/Program Files/Microsoft SQL Server/100/Tools/Binn:/cygdrive/c/Program Files/Microsoft SQL Server/100/DTS/Binn:/cygdrive/d/tmp/WordPress/mysql/mysql-5.5.18/MySQL/MySQL Server 5.5/bin:/cygdrive/d/tmp/WordPress/DevRoot/MySQL/MySQL Server 5.5/bin:/cygdrive/d/tmp/WordPress/DevRoot/php-5.3.6-Win32-VC9-x64:/cygdrive/d/tmp/WordPress/DevRoot/php-5.3.6-Win32-VC9-x64/ext:/cygdrive/d/tmp/WordPress/DevRoot/Python27:/cygdrive/c/Program Files (x86)/Common Files/Acronis/SnapAPI:/cygdrive/c/Program Files (x86)/Windows Live/Shared:/cygdrive/c/Program Files/Java/jdk1.7.0_11/bin:/home/CLi/develop/docbook/tools/fop/lib:/home/CLi/develop/docbook/tools/fop:/cygdrive/d/DevInstallRoot/FF/DD_IDE_1.1.2/TOK/BIN:/cygdrive/d/DevInstallRoot/FF/DD_IDE_1.2.0/TOK/BIN:/cygdrive/d/DevRoot/EmbeddedDevelop/trunk/Research/CLI/FF/FBK/develop/tools/develop-tools:/cygdrive/d/tmp/WordPress/DevRoot/Python27/Scripts:/cygdrive/d/tmp/dev_install_root/PostgreSQL/8.3/bin:/cygdrive/d/tmp/dev_install_root/ant/apache-ant-1.8.4/bin:/cygdrive/c/Program Files/nodejs:/cygdrive/c/Program Files/Microsoft/Web Platform Installer:/cygdrive/c/Program Files/TortoiseSVN/bin:/cygdrive/d/DevRoot/IndustrialMobileAutomation/HandheldDataSetter/ANTLR/batchFile:/cygdrive/c/Program Files (x86)/QuickTime/QTSystem:/cygdrive/d/tmp/tmp_dev_root/android/adt-bundle-windows/sdk/platform-tools:/cygdrive/d/tmp/dev_install_root/Tesseract-OCR:/cygdrive/d/tmp/dev_install_root/jython2.5.3/bin:/cygdrive/d/devinstallroot/gnuarm/bin:/cygdrive/d/tmp/dev_install_root/HTML Help Workshop:/cygdrive/c/Users/CLi/AppData/Roaming/npm:/usr/lib/lapack:/opt/gcc-4.0.4-glibc-2.3.6-kernel-2.6.17/sysroot-arm-xscale-linux-gnu/usr/include:/opt/gcc-4.0.4-glibc-2.3.6-kernel-2.6.17/sysroot-arm-xscale-linux-gnu/usr/include/linux AR=&/usr/bin/ar& AS=&/usr/bin/as& LD=&/usr/bin/ld& NM=&/usr/bin/nm& CC=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/bin/ccache /usr/bin/gcc& GCC=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/bin/ccache /usr/bin/gcc& CXX=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/bin/ccache /usr/bin/g++& CPP=&/usr/bin/cpp& CPPFLAGS=&-I/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/include& CFLAGS=&-O2 -I/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/include& CXXFLAGS=&-O2 -I/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/include& LDFLAGS=&-L/home/CLi/develop/buildroot/buildroot-2013.05/output/host/lib -L/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib -Wl,-rpath,/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib& PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 PKG_CONFIG=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/bin/pkg-config& PKG_CONFIG_SYSROOT_DIR=&/& PKG_CONFIG_LIBDIR=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib/pkgconfig:/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/share/pkgconfig& PERLLIB=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib/perl& LD_LIBRARY_PATH=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib:& CFLAGS=&-O2 -I/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/include& LDFLAGS=&-L/home/CLi/develop/buildroot/buildroot-2013.05/output/host/lib -L/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib -Wl,-rpath,/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib& CC=&/usr/bin/gcc& ./configure --prefix=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr& --sysconfdir=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/etc& --enable-shared --disable-static --disable-gtk-doc --disable-doc --disable-docs --disable-documentation --with-xmlto=no --with-fop=no ccache_cv_zlib_1_2_3=no )
/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `(cd /home/CLi/develop/buildroot/buildroot-2013.05/output/build/host-ccache-3.1.8/ && rm -rf config. PATH=/home/CLi/develop/buildroot/buildroot-2013.05/output/host/bin:/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/bin:/home/CLi/develop/crosstool-ng/x-tools/arm-xscale-linux-gnueabi/bin:/opt/crosstool-ng/bin:/home/CLi/develop/crosstool-ng/x-tools/armxscalecurl/bin:/usr/local/bin:/usr/bin:/cygdrive/d/tmp/dev_install_root/Python27_x64:/cygdrive/d/tmp/dev_install_root/Python27_x64/Lib/site-packages/PyQt4:/cygdrive/d/tmp/dev_install_root/Perl64/site/bin:/cygdrive/d/tmp/dev_install_root/Perl64/bin:/cygdrive/c/Program Files/Common Files/Microsoft Shared/Windows Live:/cygdrive/c/Program Files (x86)/Common Files/Microsoft Shared/Windows Live:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0:/cygdrive/c/Program Files (x86)/Microsoft SQL Server/100/Tools/Binn:/cygdrive/c/Program Files/Microsoft SQL Server/100/Tools/Binn:/cygdrive/c/Program Files/Microsoft SQL Server/100/DTS/Binn:/cygdrive/d/tmp/WordPress/mysql/mysql-5.5.18/MySQL/MySQL Server 5.5/bin:/cygdrive/d/tmp/WordPress/DevRoot/MySQL/MySQL Server 5.5/bin:/cygdrive/d/tmp/WordPress/DevRoot/php-5.3.6-Win32-VC9-x64:/cygdrive/d/tmp/WordPress/DevRoot/php-5.3.6-Win32-VC9-x64/ext:/cygdrive/d/tmp/WordPress/DevRoot/Python27:/cygdrive/c/Program Files (x86)/Common Files/Acronis/SnapAPI:/cygdrive/c/Program Files (x86)/Windows Live/Shared:/cygdrive/c/Program Files/Java/jdk1.7.0_11/bin:/home/CLi/develop/docbook/tools/fop/lib:/home/CLi/develop/docbook/tools/fop:/cygdrive/d/DevInstallRoot/FF/DD_IDE_1.1.2/TOK/BIN:/cygdrive/d/DevInstallRoot/FF/DD_IDE_1.2.0/TOK/BIN:/cygdrive/d/DevRoot/EmbeddedDevelop/trunk/Research/CLI/FF/FBK/develop/tools/develop-tools:/cygdrive/d/tmp/WordPress/DevRoot/Python27/Scripts:/cygdrive/d/tmp/dev_install_root/PostgreSQL/8.3/bin:/cygdrive/d/tmp/dev_install_root/ant/apache-ant-1.8.4/bin:/cygdrive/c/Program Files/nodejs:/cygdrive/c/Program Files/Microsoft/Web Platform Installer:/cygdrive/c/Program Files/TortoiseSVN/bin:/cygdrive/d/DevRoot/IndustrialMobileAutomation/HandheldDataSetter/ANTLR/batchFile:/cygdrive/c/Program Files (x86)/QuickTime/QTSystem:/cygdrive/d/tmp/tmp_dev_root/android/adt-bundle-windows/sdk/platform-tools:/cygdrive/d/tmp/dev_install_root/Tesseract-OCR:/cygdrive/d/tmp/dev_install_root/jython2.5.3/bin:/cygdrive/d/devinstallroot/gnuarm/bin:/cygdrive/d/tmp/dev_install_root/HTML Help Workshop:/cygdrive/c/Users/CLi/AppData/Roaming/npm:/usr/lib/lapack:/opt/gcc-4.0.4-glibc-2.3.6-kernel-2.6.17/sysroot-arm-xscale-linux-gnu/usr/include:/opt/gcc-4.0.4-glibc-2.3.6-kernel-2.6.17/sysroot-arm-xscale-linux-gnu/usr/include/linux AR=&/usr/bin/ar& AS=&/usr/bin/as& LD=&/usr/bin/ld& NM=&/usr/bin/nm& CC=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/bin/ccache /usr/bin/gcc& GCC=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/bin/ccache /usr/bin/gcc& CXX=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/bin/ccache /usr/bin/g++& CPP=&/usr/bin/cpp& CPPFLAGS=&-I/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/include& CFLAGS=&-O2 -I/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/include& CXXFLAGS=&-O2 -I/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/include& LDFLAGS=&-L/home/CLi/develop/buildroot/buildroot-2013.05/output/host/lib -L/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib -Wl,-rpath,/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib& PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 PKG_CONFIG=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/bin/pkg-config& PKG_CONFIG_SYSROOT_DIR=&/& PKG_CONFIG_LIBDIR=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib/pkgconfig:/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/share/pkgconfig& PERLLIB=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib/perl& LD_LIBRARY_PATH=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib:& CFLAGS=&-O2 -I/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/include& LDFLAGS=&-L/home/CLi/develop/buildroot/buildroot-2013.05/output/host/lib -L/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib -Wl,-rpath,/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr/lib& CC=&/usr/bin/gcc& ./configure --prefix=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/usr& --sysconfdir=&/home/CLi/develop/buildroot/buildroot-2013.05/output/host/etc& --enable-shared --disable-static --disable-gtk-doc --disable-doc --disable-docs --disable-documentation --with-xmlto=no --with-fop=no ccache_cv_zlib_1_2_3=no )'
make: *** [/home/CLi/develop/buildroot/buildroot-2013.05/output/build/host-ccache-3.1.8/.stamp_configured] Error 1
CLi@PC-CLI-1 ~/develop/buildroot/buildroot-2013.05
然后,对照着makefile,看看能否看出完整的make的逻辑。
【折腾过程】
1.此处的:
/usr/bin/make -j4 HOSTCC=&/usr/bin/gcc& HOSTCXX=&/usr/bin/g++& silentoldconfig
很明显,对应着是:
$(BUILD_DIR)/buildroot-config/auto.conf: $(BUILDROOT_CONFIG)
$(MAKE) $(EXTRAMAKEARGS) HOSTCC=&$(HOSTCC_NOCCACHE)& HOSTCXX=&$(HOSTCXX_NOCCACHE)& silentoldconfig
对应的关系是:
make时,调用的是:
all: world
world: toolchain $(TARGETS_ALL)
toolchain: prepare dirs dependencies $(BASE_TARGETS)
prepare: $(BUILD_DIR)/buildroot-config/auto.conf
$(BUILD_DIR)/buildroot-config/auto.conf: $(BUILDROOT_CONFIG)
$(MAKE) $(EXTRAMAKEARGS) HOSTCC=&$(HOSTCC_NOCCACHE)& HOSTCXX=&$(HOSTCXX_NOCCACHE)& silentoldconfig
2.然后继续看剩下的逻辑。
mkdir -p /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/lxdialog
此处,也容易分析出来是:
$(BUILD_DIR)/buildroot-config/%onf:
mkdir -p $(@D)/lxdialog
$(MAKE) CC=&$(HOSTCC_NOCCACHE)& HOSTCC=&$(HOSTCC_NOCCACHE)& obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F)
然后反推出来,好像是:
.PHONY: all world toolchain dirs clean distclean source outputmakefile \
legal-info legal-info-prepare legal-info-clean \
$(BASE_TARGETS) $(TARGETS) $(TARGETS_ALL) \
$(TARGETS_CLEAN) $(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) $(TARGETS_LEGAL_INFO) \
$(TOOLCHAIN_DIR) $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
$(HOST_DIR) $(BINARIES_DIR) $(STAMP_DIR)
调用到了all:
all: menuconfig
menuconfig: $(BUILD_DIR)/buildroot-config/mconf outputmakefile
@mkdir -p $(BUILD_DIR)/buildroot-config
@$(COMMON_CONFIG_ENV) $& $(CONFIG_CONFIG_IN)
$(BUILD_DIR)/buildroot-config/%onf:
mkdir -p $(@D)/lxdialog
$(MAKE) CC=&$(HOSTCC_NOCCACHE)& HOSTCC=&$(HOSTCC_NOCCACHE)& obj=$(@D) -C $(CONFIG) -f Makefile.br $(@F)
好像是的。
3.不管如何,此处,先去创建lxdialog文件夹,然后继续去:
/usr/bin/make CC=&/usr/bin/gcc& HOSTCC=&/usr/bin/gcc& obj=/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config -C support/kconfig -f Makefile.br conf
此处很明显,其实是对应的是:
config: $(BUILD_DIR)/buildroot-config/conf outputmakefile
@mkdir -p $(BUILD_DIR)/buildroot-config
@$(COMMON_CONFIG_ENV) $& $(CONFIG_CONFIG_IN)
oldconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
mkdir -p $(BUILD_DIR)/buildroot-config
@$(COMMON_CONFIG_ENV) $& --oldconfig $(CONFIG_CONFIG_IN)
randconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
@mkdir -p $(BUILD_DIR)/buildroot-config
@$(COMMON_CONFIG_ENV) $& --randconfig $(CONFIG_CONFIG_IN)
allyesconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
@mkdir -p $(BUILD_DIR)/buildroot-config
@$(COMMON_CONFIG_ENV) $& --allyesconfig $(CONFIG_CONFIG_IN)
allnoconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
@mkdir -p $(BUILD_DIR)/buildroot-config
@$(COMMON_CONFIG_ENV) $& --allnoconfig $(CONFIG_CONFIG_IN)
randpackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
@mkdir -p $(BUILD_DIR)/buildroot-config
@grep -v BR2_PACKAGE_ $(BUILDROOT_CONFIG) & $(CONFIG_DIR)/.config.nopkg
@grep '^config BR2_PACKAGE_' Config.in.legacy | \
echo &# $$pkg is not set& && $(CONFIG_DIR)/.config. done
@$(COMMON_CONFIG_ENV) \
KCONFIG_ALLCONFIG=$(CONFIG_DIR)/.config.nopkg \
$& --randconfig $(CONFIG_CONFIG_IN)
@rm -f $(CONFIG_DIR)/.config.nopkg
allyespackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
@mkdir -p $(BUILD_DIR)/buildroot-config
@grep -v BR2_PACKAGE_ $(BUILDROOT_CONFIG) & $(CONFIG_DIR)/.config.nopkg
@grep '^config BR2_PACKAGE_' Config.in.legacy | \
echo &# $$pkg is not set& && $(CONFIG_DIR)/.config. done
@$(COMMON_CONFIG_ENV) \
KCONFIG_ALLCONFIG=$(CONFIG_DIR)/.config.nopkg \
$& --allyesconfig $(CONFIG_CONFIG_IN)
@rm -f $(CONFIG_DIR)/.config.nopkg
allnopackageconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
@mkdir -p $(BUILD_DIR)/buildroot-config
@grep -v BR2_PACKAGE_ $(BUILDROOT_CONFIG) & $(CONFIG_DIR)/.config.nopkg
@$(COMMON_CONFIG_ENV) \
KCONFIG_ALLCONFIG=$(CONFIG_DIR)/.config.nopkg \
$& --allnoconfig $(CONFIG_CONFIG_IN)
@rm -f $(CONFIG_DIR)/.config.nopkg
silentoldconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
@mkdir -p $(BUILD_DIR)/buildroot-config
$(COMMON_CONFIG_ENV) $& --silentoldconfig $(CONFIG_CONFIG_IN)
olddefconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
@mkdir -p $(BUILD_DIR)/buildroot-config
$(COMMON_CONFIG_ENV) $& --olddefconfig $(CONFIG_CONFIG_IN)
defconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
@mkdir -p $(BUILD_DIR)/buildroot-config
@$(COMMON_CONFIG_ENV) $& --defconfig$(if $(DEFCONFIG),=$(DEFCONFIG)) $(CONFIG_CONFIG_IN)
%_defconfig: $(BUILD_DIR)/buildroot-config/conf $(TOPDIR)/configs/%_defconfig outputmakefile
@mkdir -p $(BUILD_DIR)/buildroot-config
@$(COMMON_CONFIG_ENV) $& --defconfig=$(TOPDIR)/configs/$@ $(CONFIG_CONFIG_IN)
savedefconfig: $(BUILD_DIR)/buildroot-config/conf outputmakefile
@mkdir -p $(BUILD_DIR)/buildroot-config
@$(COMMON_CONFIG_ENV) $& \
--savedefconfig=$(if $(DEFCONFIG),$(DEFCONFIG),$(CONFIG_DIR)/defconfig) \
$(CONFIG_CONFIG_IN)
中的某一个。
4.然后去看了看对应的文件夹:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\support\kconfig
以及其中的Makefile文件:
Makefile.br
然后其又用:
include Makefile
而调用了:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\support\kconfig\Makefile
此处,即:
执行Makefile.br,传入conf的目标;
而Makefile.br先会去包含Makefile
5.但是具体执行逻辑没看懂。
但是通过:
make[2]: Entering directory `/home/CLi/develop/buildroot/buildroot-2013.05/support/kconfig'
/usr/bin/gcc -I/usr/include/ncursesw -DCURSES_LOC=&&ncursesw/curses.h&&
-DNCURSES_WIDECHAR=1 -DLOCALE -DKBUILD_NO_NLS -I/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config -DCONFIG_=\&\&
-MM *.c & /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/.depend 2&/dev/null || :
2&/dev/null
而找到对应的地方了,是:
Makefile.br中的:
$(obj)/.depend: $(wildcard *.h *.c)
$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) -MM *.c & $@ 2&/dev/null || :
此处,也不是完全懂,但是不关心。跳过。
后来看懂了一点:
是生成对应的依赖文件:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\output\build\buildroot-config\.depend
此处其内容为:
conf.o: conf.c lkc.h expr.h list.h lkc_proto.h
confdata.o: confdata.c lkc.h expr.h list.h lkc_proto.h
expr.o: expr.c lkc.h expr.h list.h lkc_proto.h
images.o: images.c
kxgettext.o: kxgettext.c lkc.h expr.h list.h lkc_proto.h
mconf.o: mconf.c lkc.h expr.h list.h lkc_proto.h lxdialog/dialog.h
menu.o: menu.c lkc.h expr.h list.h lkc_proto.h
nconf.o: nconf.c lkc.h expr.h list.h lkc_proto.h nconf.h \
/usr/include/ncursesw/curses.h /usr/include/ncursesw/menu.h \
/usr/include/ncursesw/panel.h /usr/include/ncursesw/form.h \
/usr/include/ncursesw/ncurses.h
nconf.gui.o: nconf.gui.c nconf.h /usr/include/ncursesw/curses.h \
/usr/include/ncursesw/menu.h /usr/include/ncursesw/panel.h \
/usr/include/ncursesw/form.h /usr/include/ncursesw/ncurses.h
symbol.o: symbol.c lkc.h expr.h list.h lkc_proto.h
util.o: util.c lkc.h expr.h list.h lkc_proto.h
6.接下来,主要是去编译一些.c文件:
make[2]: Leaving directory `/home/CLi/develop/buildroot/buildroot-2013.05/support/kconfig'
make[2]: Entering directory `/home/CLi/develop/buildroot/buildroot-2013.05/support/kconfig'
/usr/bin/gcc -I/usr/include/ncursesw -DCURSES_LOC=&&ncursesw/curses.h&&
-DNCURSES_WIDECHAR=1 -DLOCALE -DKBUILD_NO_NLS -I/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config -DCONFIG_=\&\&
-c conf.c -o /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/conf.o
/usr/bin/gcc -I/usr/include/ncursesw -DCURSES_LOC=&&ncursesw/curses.h&&
-DNCURSES_WIDECHAR=1 -DLOCALE -DKBUILD_NO_NLS -I/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config -DCONFIG_=\&\&
-I. -c /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/zconf.tab.c -o /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/zconf.tab.o
In file included from /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/zconf.tab.c:2500:0:
./confdata.c: In function ‘conf_split_config’:
./confdata.c:849:6: warning: assignment makes pointer from integer without a cast [enabled by default]
/usr/bin/gcc -I/usr/include/ncursesw -DCURSES_LOC=&&ncursesw/curses.h&&
-DNCURSES_WIDECHAR=1 -DLOCALE -DKBUILD_NO_NLS -I/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config -DCONFIG_=\&\&
/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/conf.o /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/zconf.tab.o
-o /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/conf
rm /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/zconf.tab.c
所以无需关心。
make[2]: Leaving directory `/home/CLi/develop/buildroot/buildroot-2013.05/support/kconfig'
BR2_DEFCONFIG='' KCONFIG_AUTOCONFIG=/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/auto.conf KCONFIG_AUTOHEADER=/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/autoconf.h KCONFIG_TRISTATE=/home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/tristate.config BUILDROOT_CONFIG=/home/CLi/develop/buildroot/buildroot-2013.05/.config /home/CLi/develop/buildroot/buildroot-2013.05/output/build/buildroot-config/conf --silentoldconfig Config.in
则是去调用对应的conf,加上一堆参数,然后去silent的去配置。
传入的参数有
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\Config.in
存为对应的
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\.config
8.然后对于:
make[1]: Leaving directory `/home/CLi/develop/buildroot/buildroot-2013.05'
mkdir -p /home/CLi/develop/buildroot/buildroot-2013.05/output/target
rsync -a \
--exclude .empty --exclude .svn --exclude .git \
--exclude .hg --exclude=CVS --exclude '*~' \
/home/CLi/develop/buildroot/buildroot-2013.05/system/skeleton/ /home/CLi/develop/buildroot/buildroot-2013.05/output/target/
cp support/misc/target-dir-warning.txt /home/CLi/develop/buildroot/buildroot-2013.05/output/target/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM
对应着,是:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\Makefile
$(BUILD_DIR)/.root:
mkdir -p $(TARGET_DIR)
rsync -a \
--exclude .empty --exclude .svn --exclude .git \
--exclude .hg --exclude=CVS --exclude '*~' \
$(TARGET_SKELETON)/ $(TARGET_DIR)/
cp support/misc/target-dir-warning.txt $(TARGET_DIR_WARNING_FILE)
$(TARGET_DIR): $(BUILD_DIR)/.root
去创建target文件夹。
然后再去看看rsync的-a,–exclude参数的含义:
然后去拷贝target-dir-warning.txt文件。
而关于target-dir-warning.txt,即THIS_IS_NOT_YOUR_ROOT_FILESYSTEM,详见:
另外也去对比了rsync和cp:
9.然后对于后面的:
&&& host-ccache 3.1.8 Extracting
bzcat /home/CLi/develop/buildroot/buildroot-2013.05/dl/ccache-3.1.8.tar.bz2 | tar --strip-components=1 -C /home/CLi/develop/buildroot/buildroot-2013.05/output/build/host-ccache-3.1.8
&&& host-ccache 3.1.8 Patching package//ccache
&&& host-ccache 3.1.8 Updating config.sub and config.guess
for file in config.guess config. do for i in $(find /home/CLi/develop/buildroot/buildroot-2013.05/output/build/host-ccache-3.1.8 -name $file); do cp support/gnuconfig/$file $i; done
&&& host-ccache 3.1.8 Patching libtool
&&& host-ccache 3.1.8 Configuring
都找不到对应的makefile是哪里的
其中,关于bzcat,是可以找到:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\Makefile
BZCAT:=$(call qstrip,$(BR2_BZCAT))
但是没找到被别人调用。
10.后来终于找到了,是在:
(此处忽略之前已经下载:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\package\pkg-download.mk
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\package\pkg-generic.mk
# default extract command
$(2)_EXTRACT_CMDS ?= \
$$(if $$($(2)_SOURCE),$$(INFLATE$$(suffix $$($(2)_SOURCE))) $(DL_DIR)/$$($(2)_SOURCE) | \
$(TAR) $(TAR_STRIP_COMPONENTS)=1 -C $$($(2)_DIR) $(TAR_OPTIONS) -)
# Unpack the archive
$(BUILD_DIR)/%/.stamp_extracted:
@$(call MESSAGE,&Extracting&)
$(Q)mkdir -p $(@D)
$($(PKG)_EXTRACT_CMDS)
$(BUILD_DIR)/%/.stamp_patched:
@$(call MESSAGE,&Patching $($(PKG)_DIR_PREFIX)/$(RAWNAME)&)
$(foreach hook,$($(PKG)_PRE_PATCH_HOOKS),$(call $(hook))$(sep))
$(foreach p,$($(PKG)_PATCH),support/scripts/apply-patches.sh $(@D) $(DL_DIR) $(p)$(sep))
for D in $(PATCH_BASE_DIRS); do \
if test -d $${D}; then \
if test -d $${D}/$($(PKG)_VERSION); then \
support/scripts/apply-patches.sh $(@D) $${D}/$($(PKG)_VERSION) \*.patch \*.patch.$(ARCH) || exit 1; \
support/scripts/apply-patches.sh $(@D) $${D} \*.patch \*.patch.$(ARCH) || exit 1; \
$(foreach hook,$($(PKG)_POST_PATCH_HOOKS),$(call $(hook))$(sep))
$(Q)touch $@
# Configure
$(BUILD_DIR)/%/.stamp_configured:
$(foreach hook,$($(PKG)_PRE_CONFIGURE_HOOKS),$(call $(hook))$(sep))
@$(call MESSAGE,&Configuring&)
$($(PKG)_CONFIGURE_CMDS)
$(foreach hook,$($(PKG)_POST_CONFIGURE_HOOKS),$(call $(hook))$(sep))
$(Q)touch $@
去解压Extracting,打补丁Patching和配置Configuring的。其中在:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\package\pkg-autotools.mk
中调用对应的PATCH的HOOK的:
# Utility function to upgrade config.sub and config.guess files
# argument 1 : directory into which config.guess and config.sub need
# to be updated. Note that config.sub and config.guess are searched
# recursively in this directory.
define CONFIG_UPDATE
for file in config.guess config. do \
for i in $$(find $(1) -name $$file); do \
cp support/gnuconfig/$$file $$i; \
# Hook to update config.sub and config.guess if needed
define UPDATE_CONFIG_HOOK
@$$(call MESSAGE,&Updating config.sub and config.guess&)
$$(call CONFIG_UPDATE,$$(@D))
$(2)_POST_PATCH_HOOKS += UPDATE_CONFIG_HOOK
此时,真正明白了:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\package\pkg-generic.mk
# Configure
$(BUILD_DIR)/%/.stamp_configured:
$(foreach hook,$($(PKG)_PRE_CONFIGURE_HOOKS),$(call $(hook))$(sep))
@$(call MESSAGE,&Configuring&)
$($(PKG)_CONFIGURE_CMDS)
$(foreach hook,$($(PKG)_POST_CONFIGURE_HOOKS),$(call $(hook))$(sep))
$(Q)touch $@
$($(PKG)_CONFIGURE_CMDS)
去产生对应的:
(cd /home/CLi/develop/buildroot/buildroot-2013.05/output/build/host-ccache-3.1.8/ && rm -rf config. PATH=xxxxxx …… )
即,其中包含了我们此处关心的PATH的。
11.而对应的:
$($(PKG)_CONFIGURE_CMDS)
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\package\pkg-autotools.mk
中的host的package的configure的:
# Configure package for host
# disable all kind of documentation generation in the process,
# because it often relies on host tools which may or may not be
# installed.
define $(2)_CONFIGURE_CMDS
(cd $$($$(PKG)_SRCDIR) && rm -rf config. \
$$(HOST_CONFIGURE_OPTS) \
CFLAGS=&$$(HOST_CFLAGS)& \
LDFLAGS=&$$(HOST_LDFLAGS)& \
$$($$(PKG)_CONF_ENV) \
./configure \
--prefix=&$$(HOST_DIR)/usr& \
--sysconfdir=&$$(HOST_DIR)/etc& \
--enable-shared --disable-static \
--disable-gtk-doc \
--disable-doc \
--disable-docs \
--disable-documentation \
--with-xmlto=no \
--with-fop=no \
$$($$(PKG)_CONF_OPT) \
此处,对应着是:
$$(HOST_CONFIGURE_OPTS)
包括了我们关心的PATH变量的。
$$(HOST_CONFIGURE_OPTS)
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\package\Makefile.in
TARGET_MAKE_ENV=PATH=$(TARGET_PATH) \
PERLLIB=&$(HOST_DIR)/usr/lib/perl&
HOST_CONFIGURE_OPTS=PATH=$(HOST_PATH) \
AR=&$(HOSTAR)& \
AS=&$(HOSTAS)& \
LD=&$(HOSTLD)& \
NM=&$(HOSTNM)& \
CC=&$(HOSTCC)& \
GCC=&$(HOSTCC)& \
CXX=&$(HOSTCXX)& \
CPP=&$(HOSTCPP)& \
CPPFLAGS=&$(HOST_CPPFLAGS)& \
CFLAGS=&$(HOST_CFLAGS)& \
CXXFLAGS=&$(HOST_CXXFLAGS)& \
LDFLAGS=&$(HOST_LDFLAGS)& \
PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \
PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 \
PKG_CONFIG=&$(PKG_CONFIG_HOST_BINARY)& \
PKG_CONFIG_SYSROOT_DIR=&/& \
PKG_CONFIG_LIBDIR=&$(HOST_DIR)/usr/lib/pkgconfig:$(HOST_DIR)/usr/share/pkgconfig& \
PERLLIB=&$(HOST_DIR)/usr/lib/perl& \
LD_LIBRARY_PATH=&$(HOST_DIR)/usr/lib:$(LD_LIBRARY_PATH)&
至此,彻底明白了,对应的PATH,就是此处添加的:
PATH=$(HOST_PATH)
13.而对应的:
是对应的同文件:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\package\Makefile.in
HOST_PATH=$(HOST_DIR)/bin:$(HOST_DIR)/usr/bin:$(PATH)
而其中是,直接包含:
cygwin中的PATH包含了Window中的一些变量,其中包含了空格和括号,导致之前出错的。
所以此处,应该是去对PATH得到的值,加上引号,估计就可以解决问题了。
至此,算是搞懂了,绝大部分的,Buildroot中的make的逻辑。
也找到了真正的,此处所关心的,PATH路径引入的位置,是:
D:\tmp\tmp_dev_root\cgwin\home\CLi\develop\buildroot\buildroot-2013.05\package\Makefile.in
HOST_PATH=$(HOST_DIR)/bin:$(HOST_DIR)/usr/bin:$(PATH)
所以如果有路径方面的问题,估计就是关心一下package\Makefile.in中的各种路径变量即可。
后续问题的解决,详见:
分类 未分类
分类目录分类目录
选择分类目录
Uncategorized&&(10)
单身恋爱婚姻家庭&&(112)
&&&Lovestory&&(7)
&&&单身&&(21)
&&&婚姻&家庭&&(34)
&&&恋爱&&(46)
哲理 人生 故事&&(210)
&&&哲理佳句&&(39)
&&&电视剧《天道》&&(6)
&&&财富人生&&(44)
工作和技术&&(3,664)
&&&CharEncoding&&(3)
&&&CodeShare&&(17)
&&&CompilerLinkerParser&&(94)
&&&&&&ANTLR&&(92)
&&&&&&JavaCC&&(1)
&&&DevToolSoft&&(74)
&&&&&&Linux on Win&&(40)
&&&&&&&&&Cygwin&&(33)
&&&&&&&&&Gow&&(1)
&&&&&&&&&MingW&&(3)
&&&&&&&&&MSYS&&(3)
&&&&&&Putty&&(1)
&&&&&&Total Commander&&(2)
&&&&&&VersionControl&&(27)
&&&&&&&&&Git&&(18)
&&&&&&&&&SVN&&(7)
&&&Docbook&&(127)
&&&DocxyGen&&(1)
&&&Elance&&(6)
&&&Embedded&&(517)
&&&&&&BusyBox&&(2)
&&&&&&CrossCompiler&&(102)
&&&&&&&&&Buildroot&&(30)
&&&&&&&&&crosstool-ng&&(40)
&&&&&&Embedded Emulator&&(15)
&&&&&&&&&QEMU&&(15)
&&&&&&Embedded Filesystem&&(4)
&&&&&&&&&Yaffs2&&(2)
&&&&&&Embedded IDE&&(3)
&&&&&&&&&HEW&&(1)
&&&&&&&&&IAR&&(1)
&&&&&&Embedded OnChip Resource&&(2)
&&&&&&&&&Memory&&(2)
&&&&&&&&&&&&SDRAM&&(1)
&&&&&&Embedded OS&&(9)
&&&&&&&&&Realtime OS&&(2)
&&&&&&Embedded Peripherals&&(112)
&&&&&&&&&Bluetooth&&(21)
&&&&&&&&&CAN Bus&&(2)
&&&&&&&&&DMA&&(1)
&&&&&&&&&GPIO&&(1)
&&&&&&&&&Serial Communication&&(13)
&&&&&&&&&&&&RS232&&(10)
&&&&&&&&&&&&&&&SecureCRT&&(3)
&&&&&&&&&&&&RS485&&(2)
&&&&&&&&&Storage&&(73)
&&&&&&&&&&&&Flash&&(31)
&&&&&&&&&&&&SD/MMC&&(9)
&&&&&&&&&&&&USB&&(32)
&&&&&&Fieldbus&&(57)
&&&&&&&&&DTM&&(1)
&&&&&&&&&EDDL&&(10)
&&&&&&&&&HART&&(29)
&&&&&&&&&Modbus&&(1)
&&&&&&&&&Profibus&&(6)
&&&&&&&&&PROFINET&&(2)
&&&&&&Industrial Automation&&(59)
&&&&&&Linaro&&(1)
&&&&&&Linux Kernel&&(2)
&&&&&&MCU SoC IP-Core&&(11)
&&&&&&&&&ARM&&(4)
&&&&&&&&&NEC&&(2)
&&&&&&PLC&&(38)
&&&&&&Symbology_Barcode&&(6)
&&&&&&Thread&&(2)
&&&&&&Uboot&&(17)
&&&EncryptDecrypt&&(1)
&&&Hardware&&(13)
&&&&&&Opensource Hardware&&(10)
&&&&&&&&&pcDuino&&(7)
&&&IDE TextEditor&&(87)
&&&&&&Apatana Studio 3&&(2)
&&&&&&ATOM&&(4)
&&&&&&Eclipse&&(37)
&&&&&&Notepad++&&(5)
&&&&&&SciTE&&(1)
&&&&&&Source Insight&&(7)
&&&&&&Sublime Text&&(6)
&&&&&&Visual Studio&&(4)
&&&&&&Xcode&&(20)
&&&&&&&&&Instruments&&(1)
&&&&&&&&&iOS Simulator&&(1)
&&&Network&&(7)
&&&&&&SIP&&(1)
&&&&&&Wireshark&&(3)
&&&OS_Platform&&(583)
&&&&&&CentOS&&(4)
&&&&&&Linux&&(146)
&&&&&&&&&diff&&(4)
&&&&&&&&&Driver&&(36)
&&&&&&&&&gcc&&(1)
&&&&&&&&&makefile&&(13)
&&&&&&&&&NFS&&(2)
&&&&&&&&&patch&&(3)
&&&&&&&&&Wireless&&(7)
&&&&&&Mac&&(35)
&&&&&&&&&Cocoa&&(1)
&&&&&&&&&iphone&&(1)
&&&&&&MobilePlatform&&(351)
&&&&&&&&&Android&&(266)
&&&&&&&&&&&&Android Studio&&(14)
&&&&&&&&&&&&Osmand&&(5)
&&&&&&&&&iOS&&(85)
&&&&&&&&&&&&Swift&&(35)
&&&&&&Ubuntu&&(38)
&&&&&&Windows&&(9)
&&&pneumatic&&(1)
&&&ProgrammingLanguage&&(737)
&&&&&&C&&(48)
&&&&&&C#&&(161)
&&&&&&GO&&(47)
&&&&&&Java&&(48)
&&&&&&&&&JSP&&(1)
&&&&&&&&&Openfire&&(10)
&&&&&&&&&Spark&&(1)
&&&&&&Object-C&&(4)
&&&&&&Perl&&(4)
&&&&&&PHP&&(151)
&&&&&&&&&Drupal&&(16)
&&&&&&&&&Joomla&&(4)
&&&&&&&&&MediaWiki&&(4)
&&&&&&&&&WordPress&&(90)
&&&&&&Python&&(253)
&&&&&&&&&BeautifulSoup&&(11)
&&&&&&&&&Django&&(7)
&&&&&&&&&Python GUI&&(3)
&&&&&&&&&Python IDE&&(14)
&&&&&&&&&Python3&&(8)
&&&&&&&&&StringEncoding&&(16)
&&&&&&R&&(5)
&&&&&&VB.Net&&(5)
&&&&&&VBA&&(11)
&&&RegularExpression&&(54)
&&&&&&Android regex&&(3)
&&&&&&C# Regex&&(1)
&&&&&&dreamweaver regex&&(1)
&&&&&&EditPlus TR1&&(1)
&&&&&&Java regex&&(6)
&&&&&&Notepad++ regex&&(1)
&&&&&&Perl //&&(1)
&&&&&&PHP preg_match&&(1)
&&&&&&Python re&&(30)
&&&&&&UltraEdit 3 type regex&&(1)
&&&&&&VB.NET Regex&&(1)
&&&Soft Dev Basics&&(19)
&&&TechMaterialDownload&&(27)
&&&technical_fun&&(2)
&&&TechnicalLife&&(20)
&&&tmp_todo&&(103)
&&&Virtual Machine&&(78)
&&&&&&VirtualBox&&(42)
&&&&&&VMWare&&(29)
&&&Web_Technology&&(343)
&&&&&&BBS&&(8)
&&&&&&Crawl_EmulateLogin&&(75)
&&&&&&&&&Amazon&&(29)
&&&&&&&&&eBay&&(9)
&&&&&&&&&Scrapy&&(6)
&&&&&&&&&Taobao&&(1)
&&&&&&CSS&&(6)
&&&&&&Google&&(32)
&&&&&&&&&Google Adsense&&(28)
&&&&&&HTML&&(5)
&&&&&&JavaScript&&(24)
&&&&&&&&&easyUI&&(2)
&&&&&&&&&KindEditor&&(3)
&&&&&&&&&Node.js&&(10)
&&&&&&JSON&&(22)
&&&&&&MySQL&&(3)
&&&&&&Skydrive&&(5)
&&&&&&swf flash&&(1)
&&&&&&Tencent&&(1)
&&&&&&UML&&(2)
&&&&&&VirtualHost&&(68)
&&&&&&&&&cPanel&&(3)
&&&&&&&&&hawk&&(11)
&&&&&&&&&sugarhosts&&(7)
&&&&&&&&&TransferWebHosting&&(16)
&&&&&&WebServer&&(5)
&&&&&&&&&apache&&(4)
&&&&&&&&&nginx&&(1)
&&&&&&WeiXin&&(5)
&&&&&&WLW&&(24)
&&&&&&XML&&(3)
&&&&&&&&&XPath&&(2)
&&&wiki&&(2)
&&&经验和教训&&(9)
无法写入&&(1)
有意义&&(637)
&&&值得看的东东&&(138)
&&&新闻与社会&&(196)
&&&日本&&(13)
&&&看图不说话&&(113)
&&&罗永浩[老罗]&&(18)
有趣&&(850)
&&&多收了三五斗&&(21)
&&&开心西游记&&(43)
&&&笑话幽默&&(106)
&&&脑筋急转弯&&(19)
&&&视频&&(22)
&&&超强男女经典征婚启事&&(9)
生活&&(1,433)
&&&Tmp&&(9)
&&&个人推荐&&(84)
&&&信息记录&&(4)
&&&历史&&(3)
&&&安徽&&(12)
&&&心情与思考&&(65)
&&&文学&&(13)
&&&旅游&&(23)
&&&楼市与住房&&(308)
&&&&&&日常生活&&(3)
&&&&&&海德公园&&(39)
&&&&&&装修&&(223)
&&&&&&&&&卫浴&&(1)
&&&&&&&&&吊顶&&(1)
&&&&&&&&&地暖&&(50)
&&&&&&&&&地板&&(2)
&&&&&&&&&家电商场&&(1)
&&&&&&&&&封阳台&&(1)
&&&&&&&&&建材市场&&(9)
&&&&&&&&&整体橱柜&&(8)
&&&&&&&&&瓷砖&&(6)
&&&&&&&&&&&&木纹砖&&(3)
&&&&&&&&&空调&&(1)
&&&&&&&&&衣柜&&(1)
&&&&&&&&&装修日记&&(117)
&&&&&&&&&门&&(2)
&&&淮安&&(3)
&&&游戏&&(14)
&&&电影&&(1)
&&&电脑+数码+软件&&(598)
&&&&&&数码电玩&&(165)
&&&&&&&&&I9100G&&(71)
&&&&&&&&&U盘量产&&(3)
&&&&&&&&&华为手机&&(21)
&&&&&&&&&安卓手机&&(5)
&&&&&&&&&老人机&&(1)
&&&&&&电信&&(2)
&&&&&&电脑_生活&&(9)
&&&&&&电脑知识&&(80)
&&&&&&笔记类软件&&(4)
&&&&&&&&&为知笔记&&(1)
&&&&&&&&&印象笔记&&(2)
&&&&&&系统使用&&(111)
&&&&&&&&&Mac系统&&(34)
&&&&&&&&&Windows系统&&(77)
&&&&&&&&&&&&win10&&(5)
&&&&&&网上银行&&(27)
&&&&&&&&&PayPal&&(1)
&&&&&&&&&中行BOC&&(13)
&&&&&&&&&华夏hxb&&(1)
&&&&&&&&&工行ICBC&&(5)
&&&&&&&&&招行&&(1)
&&&&&&&&&支付宝&&(3)
&&&&&&路由器&&(7)
&&&&&&软件使用&&(168)
&&&&&&&&&360&&(2)
&&&&&&&&&chrome&&(3)
&&&&&&&&&Excel&&(8)
&&&&&&&&&Firefox&&(17)
&&&&&&&&&Flash Player&&(2)
&&&&&&&&&google&&(6)
&&&&&&&&&&&&goagent&&(4)
&&&&&&&&&IE&&(1)
&&&&&&&&&Office&&(3)
&&&&&&&&&Outlook&&(5)
&&&&&&&&&PDF&&(2)
&&&&&&&&&PicPick&&(1)
&&&&&&&&&PowerPoint&&(1)
&&&&&&&&&QQ&&(14)
&&&&&&&&&shadowsocks&&(3)
&&&&&&&&&Thunderbird&&(14)
&&&&&&&&&Word&&(13)
&&&&&&&&&网易163&&(2)
&&&&&&&&&翻墙&&(9)
&&&经济&&(15)
&&&网上购物&&(17)
&&&美食&&(8)
&&&羽毛球&&(22)
&&&苏州&&(57)
&&&&&&工业园区&&(2)
&&&&&&&&&独墅湖高教区&&(2)
知道&&(180)
&&&English&&(60)
&&&生活百科&&(23)
&&&网络资源下载&&(45)
移动硬盘&&(1)
笔记本相关&&(533)
&&&买本前必看&&(33)
&&&无线和迅驰及其相关&&(10)
&&&电脑知识扫盲&&(12)
&&&神舟资料整理&&(342)
&&&&&&别人对神舟的无端诋毁&&(7)
&&&&&&某些笔记本价钱贵但毛病也不少&&(24)
&&&&&&神舟本网站评测&&(7)
&&&&&&神舟电脑评测&&(151)
&&&&&&神舟相关&&(103)
&&&&&&神舟笔记本好的方面的例子&&(17)
&&&&&&给不熟悉的人的解答&&(26)
&&&笔记本cpu&&(26)
&&&笔记本显卡&&(36)
&&&笔记本显卡游戏效果&&(27)
&&&走出笔记本使用误区&&(6)
&&&走出笔记本购买的误区&&(14)
&&&降频功耗散热&&(11)
音乐天堂&&(526)
&&&歌曲类型&&(437)
&&&&&&Hiphop_R&B_Rock&&(23)
&&&&&&中文歌曲&&(160)
&&&&&&外文歌曲&&(200)
&&&&&&纯音乐&无歌词&&(54)
&&&特定歌手&&(38)
&&&&&&Enigma&&(11)
&&&&&&Linkinpark&&(14)
&&&&&&陈琳&&(13)
&&&音乐下载&&(1)
&&&音乐知识&&(9)
默认分类&&(212)
&&&默认分类&&(3)
2016年五月
9101112131415
16171819202122
23242526272829
免费的格式化Javascript源码的网站
查询Unicode字符,且还带Oct,Decimal,Hex,HTML Entity
HTML和Javascript都支持,很好用。

我要回帖

更多关于 make menuconfig 配置 的文章

 

随机推荐