MT7628开发环境搭建

参考openwrt 快速入门

1.环境搭建

1.1Ubuntu docker

https://www.runoob.com/docker/ubuntu-docker-install.html

1.1.1使用官方安装脚本自动安装

安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

ps: 我已经放弃用deepin编译旧版openwrt ,修复了十几个bug还是有bug,无敌
下载14.04版本
docker pull ubuntu:14.04

docker pull ubuntu:14.04

1.1.2创建一个容器

sudo docker run -it ubuntu /bin/bash
sudo docker run -it ubuntu:14.04 /bin/bash

1.1.3查看容器状态

sudo docker ps -a

启动时候共享主机网络 //如果需要使用主机的vpn
sudo docker run --net=host -it ubuntu /bin/bash

1.1.4使用 docker start 启动一个已停止的容器

$ docker start b750bbbcfd88

后台运行在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

$ docker run -itd --name ubuntu-test ubuntu /bin/bash

1.1.5停止一个容器

停止容器的命令如下:
$ docker stop <容器 ID>

1.1.6进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

docker attach
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

$ docker attach 1e560fca3906
$ docker exec 1e560fca3906

1.1.7文件拷贝

将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/
将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。
docker cp /www/runoob 96f7f14e99ab:/www
将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
docker cp 96f7f14e99ab:/www /tmp/

1.1.8启动时候共享主机网络

sudo docker run --net=host -it ubuntu /bin/bash

1.1.9 Manage Docker as a non-root user

To create the docker group and add your user:
1.Create the docker group.

sudo groupadd docker

2.Add your user to the docker group.

sudo usermod -aG docker $USER

3.更新docker数据用户组

newgrp docker

1.1.x更多指令详见

https://www.runoob.com/docker/docker-container-usage.html

1.2依赖安装

1.2.1deepin20

sudo apt-get install subversion g++ zlib1g-dev build-essential git python rsync man-db
sudo apt-get install libncurses5-dev gawk gettext unzip file libssl-dev wget zip time libjsoncpp-dev

1.2.2ubutnu14.04

sudo apt-get install git g++ make libncurses5-dev subversion libssl-dev gawk libxml-parser-perl unzip wget python xz-utils vim zlibc zlib1g zlib1g-dev  build-essential ccache gettext xsltproc software-properties-common

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt update
sudo apt-get install openjdk-8-jdk

1.3编译固件

git clone https://git.openwrt.org/openwrt/openwrt.git/
cd openwrt

./scripts/feeds update -a
./scripts/feeds install -a

make menuconfig

make kernel_menuconfig 

#最后一个命令将打开一个菜单,如果您想为“TL-WR841N v11”这款无线路由构建固件,您可以这样设置:
#“Target System” ⇒ “Atheros AR7xxx/AR9xxx”
#“Target Profile” ⇒ “TP-LINK TL-WR841N/ND v11”
#然后选择退出并保存设置。现在我们就可以开始使用以下命令构建固件了,该过程将持续一段时间:

#make download会根据你的menuconfig配置下载相关的源代码。
make download -j12

make -j12 s=V

#完成以后,固件可以在目录 ./bin/targets/ar71xx/generic/ 中找到。
#以 *-factory.bin 命名的固件是用于首次安装。
#以 *-sysupgrade.bin 命名的固件是用于更新已安装的OpenWrt。
#备注:


#您可以将固件中的自定义文件放入目录<buildroot>/files。例如,您想将my_config在固件的/etc/config/目录中,则对应路径为<buildroot>/files/etc/config/my_config。如果files 目录在您的构建系统中不存在,手动创建即可。

1.3.x编译异常

1.3.x.1解决错误 freadahead

error: #error "Please port gnulib freadahead.c to your platform!

error: #error "Please port gnulib fseterr.c to your platform!

进入出错目录:
sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c 
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h

1.3.x.2解决错误 undefined reference to `makedev’

in function probe_all':devname.c:(.text+0x888): undefined reference tomakedev’

find . -name devname.c
./build_dir/host/e2fsprogs-1.42.8/lib/blkid/devname.c
vi ./build_dir/host/e2fsprogs-1.42.8/lib/blkid/devname.c

+  #include <sys/sysmacros.h>

1.3.x.3 解决错误 error: called object ‘major’ is not a function or function pointer

libmtd.c: In function ‘dev_node2num’:libmtd.c:444:10: error: called object ‘major’ is not a function or function

find . -name libmtd.c 

./build_dir/host/mtd-utils-1.4.5/lib/libmtd.c

vi ./build_dir/host/mtd-utils-1.4.5/lib/libmtd.c

+  #include <sys/sysmacros.h>

采用这种方式去更换它

   ./build_dir/host/mtd-utils-1.4.5/mkfs.jffs2.c
   ./build_dir/host/mtd-utils-1.4.5/ubi-utils/src/libubi.c
   ./build_dir/host/mtd-utils-1.4.5/mkfs.ubifs/devtable.c
	 ./build_dir/host/mtd-utils-1.4.5/mkfs.ubifs/mkfs.ubifs.h 
1.3.X.4 解决错误 undefined reference to `llseek’

/mtd-utils-1.4.5/mkfs.ubifs/mkfs.ubifs.c:868: undefined reference to `llseek’

添加头文件
#include <sys/types.h>
#include <unistd.h>

1.3.x.5 Error when bootstrapping CMake:Problem while running initial CMake

cat /home/reasonss/mint/mint-mt7628-openwrt/mint-mt7628-openwrt/build_dir/host/cmake-2.8.12.2/CMakeFiles/CMakeError.log

CMake Error: your Fortran compiler: "CMAKE_Fortran_COMPILER-NOTFOUND" was not found.   Please set CMAKE_Fortran_COMPILER to a valid compiler path or name.


#试过几个办法都不行。发生是cmake版本太旧了 ,去tool/cmake 里面把版本换了

#下面的文件来自于 最新开源的openwrt tool里面的cmake   


#
# Copyright (C) 2006-2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk

PKG_NAME:=cmake
PKG_VERSION:=3.20.3
PKG_RELEASE:=1
PKG_CPE_ID:=cpe:/a:kitware:cmake

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/Kitware/CMake/releases/download/v$(PKG_VERSION)/ \
		https://cmake.org/files/v3.19/
PKG_HASH:=4d008ac3461e271fcfac26a05936f77fc7ab64402156fb371d41284851a651b8

HOST_BUILD_PARALLEL:=1
HOST_CONFIGURE_PARALLEL:=1

include $(INCLUDE_DIR)/host-build.mk

HOST_CONFIGURE_VARS += \
	CC="$(HOSTCC_NOCACHE)" \
	CXX="$(HOSTCXX_NOCACHE)" \
	MAKEFLAGS="$(HOST_JOBS)" \
	CXXFLAGS="$(HOST_CFLAGS)"

HOST_CONFIGURE_ARGS := \
	$(if $(MAKE_JOBSERVER),--parallel="$(MAKE_JOBSERVER)") \
	--prefix="$(STAGING_DIR_HOST)" \
	--generator=Ninja

define Host/Compile/Default
	+$(NINJA) -C $(HOST_BUILD_DIR) $(1)
endef

define Host/Install/Default
	+$(NINJA) -C $(HOST_BUILD_DIR) install
endef

define Host/Uninstall/Default
	+$(NINJA) -C $(HOST_BUILD_DIR) uninstall
endef

ifneq ($(findstring c,$(OPENWRT_VERBOSE)),)
  HOST_MAKE_FLAGS += VERBOSE=1
endif

$(eval $(call HostBuild))

1.3.x.6 Unknown option: CPPFLAGS=-I/home/reasonss/mint/mint-mt7628-openwrt/mint-mt7628-openwrt/staging_dir/host/include
  941 行 注释掉
  #*) die "Unknown option: $1" ;;
1.3.x.7 error: too few arguments to function ‘_PyImport_FixupBuiltin’
toolchain 的gdb版本换了

https://git.openwrt.org/?p=openwrt/openwrt.git;a=tree;f=toolchain/gdb;h=baca86b5d20e57b7545464a01f0bfd67eee7a1f7;hb=HEAD

1.3.x.8 Download failed linux-3.10.14.tar.xz
vi scripts/download.pl
//line 194
push @mirrors, 'https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/';

// 还发生了
1.3.x.9 Argument list too long
//把目录路径换一下,尽可能卖一个
1.3.x.10 error: ‘const char* libc_name_p(const char*, unsigned int)’ redeclared inline with ‘gnu_inline’ attribute
https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=ec1cc0263f156f70693a62cf17b254a0029f4852#patch1
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

交叉编译之王 hahaha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值