• openwrt 编译环境搭建及Makefile


    Openwrt编译环境搭建

        操作系统 centos-5.8 64位

        安装gnome, 可使用Xmanager

       #yum -y groupinstall "X Window System"

       #yum -y groupinstall "Desktop"

        安装svn

       #yum install subversion 

        下载openwrt源码

     #svn co svn://svn.openwrt.org/openwrt/trunk/

    地址:https://dev.openwrt.org/wiki/GetSource



       # make menuconfig, 报错

          不执行 ./scripts/feeds update -a和 ./scripts/feeds install -a 之前, 

          make menuconfig里是看不到LuCI选项的。  

        #vim README

         "./scripts/feeds update -a" to get all the latest package definitions defined in feeds.conf/ feeds.conf.default respectively.

         feeds.conf.default里需要下载的packege的几条git 和svn 的路径地址。

         "./scripts/feeds install -a" to install symlinks of all of them into package/feeds/

        在package/feeds/luci/中(原本是没有该目录的, package/feeds目录是在执行完./scripts/feeds 的两条命令之后生成的), 可以看到一些链接, ll看一下

         例:community-profiles -> ../../../feeds/luci/contrib/package/community-profiles/

                                                         此处的feeds是trunk目录下的feeds目录, 原来也是没有的, 在执行完./scripts/feeds两条命令之后生成。

              tmp目录本来也是没有的, 在执行完上述两条命令后, 在tmp目录下生成.config和其他文件, 在make menuconfig之后, tmp/.config更新。

              trunk下的.config原来没有, 也是此时下载的。 在make menuconfig之后更新。

       # make menuconfig, 报错

    1. Please install the GNU C++ Compiler (g++).

        #yum install gcc-c++;

    2. Please install ncurses. (Missing libncurses.so or ncurses.h)

        #yum install ncurses;

        #yum install ncurses-devel;

    3. Please install zlib. ( Missing libz.so or zlib.h)

        #yum install zlib-devel

    4. Please install git(git-core) v1.6.5 or later.

        下载地址:http://git-scm.com/downloads, 点击Old releases.

        用wget工具: #wget https://www.kernel.org/pub/software/scm/git/git-1.9.2.tar.gz

        #vim INSTALL;

        #make prefix=/usr all doc info ;# as yourself

       

        缺少ssl.h       #yum install openssl-devel;

        缺少curl    http.h:54: error: expected specifier-qualifier-list before ‘CURLcode’

        #yum install curl

        还是缺少curl

        #yum install curl-devel

        warning: expat.h缺少

        #yum install expat-devel;

        /bin/sh: msgfmt command not found;

        #yum install gettext;

        /bin/sh: asciidoc command not found;

            安装mercurial

           #wget http://mercurial.selenic.com/release/mercurial-3.0.tar.gz

            #cd mercurial

           #make

           #make install

            mercurial/base85.c:13:20: error: Python.h: No such file or directory

               安装python

               #yum install python

               #yum install python-devel

               此时make install 时, 提示需要安装python-docutils

               wget http://cznic.dl.sourceforge.net/project/docutils/docutils/0.11/docutils-0.11.tar.gz

                   #wget  https://www.python.org/ftp/python/3.4.0/Python-3.4.0.tgz

                   报错:ERROR: certificate common name `*.c.ssl.fastly.net' doesn't match requested host name `www.python.org'.

                   #wget --no-check-certificate https://www.python.org/ftp/python/3.4.0/Python-3.4.0.tgz

        #hg clone -r 8.6.9 https://asciidoc.googlecode.com/hg/ asciidoc-8.6.9

        #autoconf: autoconf command not found

            #yum install autoconf

         git安装好之后,#make menuconfig正常, 选定LuCI, 生成.config(trunk下原来是没有.config文件的)

        #make 

        在./tmp/.config-packge.in中(此.config-package.in也是make menuconfig生成的), 有menu "LuCI"的配置

        在.config中, CONFIG_PACKAGE_luci=y

        在./tmp/.config中,CONFIG_PACKAGE_luci=y

        在./tmp/.packagedeps:package-$(CONFIG_PACKAGE_luci) += feeds/luci/luci 中

        太多的Makefile和config.in都是后来生成的, 有必要从开始Makefile看起。

    一: make menuconfig V=99过程

          topdir的Makfile中, include $(TOPDIR)/include/toplevel.mk

          toplevel.mk中, 

          menuconfig: scripts/config/mconf prepare-tmpinfo FORCE

        if [ ! -e .config -a -e $(HOME)/.openwrt/defconfig ]; then
          cp $(HOME)/.openwrt/defconfig .config;
        fi
        $< Config.in

        (1)  scripts/config/mconf, toplevel.mk中,:

                       $(_SINGLE)$(SUBMAKE) -s -C scripts/config all CC="$(HOSTCC_WRAPPER)" 

                                                    //export MAKEFLAGS= ;umask 022; make -w -s -C scripts/config all CC="gcc"

                                                 // topdir的Makefile中, _SINGLE=export MAKEFLAGS=$(space)

                                 //toplevel.mk中,SUBMAKE :=umask 022; $(SUBMAKE)              umask 022, 表示默认的文件夹权限为755(777-022). 文件权限为644(666-022)?

             scrpts/config/Makefile中,

                                        all:conf mconf

                                        conf: $(conf-objs)  //conf-objs :conf.o zconf.tab.o

                mconf: $(mconf-objs) $(lxidag-objs)

                                                $(CC) -o $@ $^ $(call check_lxdialog, ldflags, $(CC)) , 

                                                               生成mconf, 至此, menuconfig的第一个依赖, scripts/config/mconf 完成, 生成/scripts/config/mconf文件

        (2)prepare-tmpinfo, 

                                                                      

  • 相关阅读:
    PHP后门新玩法:一款猥琐的PHP后门分析
    中国菜刀批量导出数据
    渗透测试:反弹与转发小结
    怎样用Java自制优秀的图片验证码?这样!
    6条 Tips 为你照亮 GitHub 寻宝之路
    如何搭建一个“不可告人的”私人专属网盘?教程拿去
    6个炫酷又好用的 Python 工具,个个都很奔放呀
    20个Java练手项目,献给嗜学如狂的人
    如何自己动手写一个搜索引擎?我是一份害羞的教程🙈
    GitHub上个最有意思的项目合集(技术清单系列)
  • 原文地址:https://www.cnblogs.com/gavinwu/p/3688187.html
Copyright © 2020-2023  润新知