firmware-mod-kit Ubuntu22.04编译通过

2023-11-13

初步了解

初步了解了一下固件打包,发现一般都是有专门的打包工具。openwrt有一个项目是lede,在Github上面可以看到,先下载来看看。同时也查到一个名为firmware-mod-kit的项目,看样子好像早期打包的工具。
说明文档里面说了适配早期的OpenWrt,里面也提到了OpenWrt has its Image Builder
在这里插入图片描述
看了一下使用方法:
在这里插入图片描述

尝试编译

尝试一下,新建一个文件夹output,将光猫解包好的rootfs放在rootfs里面。
./build-firmware.sh output/ rootfs/
但是报错
/home/u/Videos/firmware-mod-kit-master/src/uncramfs/uncramfs.c:324: undefined reference to 'minor'
介于这是十年前的代码,现在编译器可能是有改动,在这个确实的文件里面添加一个头文件#include <sys/sysmacros.h>,这个可以简单的跳过,在cramfs类似的.c文件里面都添加#include <sys/sysmacros.h>就可以了。

在这个报错

make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/u/Videos/firmware-mod-kit-master/src/lzma/C/7zip/Compress/LZMA_Lib'
g++ -O3 mksquashfs.o read_fs.o sort.o -L../lzma/C/7zip/Compress/LZMA_Lib -llzma -o mksquashfs-lzma
/usr/bin/ld: read_fs.o:(.bss+0x0): multiple definition of `swap'; mksquashfs.o:(.bss+0x132a48): first defined here
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:14: mksquashfs-lzma] Error 1
make[1]: Leaving directory '/home/u/Videos/firmware-mod-kit-master/src/squashfs-2.1-r2'

可能在新的编译器当中将这个swap变量放到别的地方了吧。
在这里插入图片描述
改成。
在这里插入图片描述

make[2]: Leaving directory '/home/u/Videos/firmware-mod-kit-master/src/lzma/C/7zip/Compress/LZMA_Lib'
g++ -O3 unsquashfs.o -L../lzma/C/7zip/Compress/LZMA_Lib -llzma -o unsquashfs-lzma
/usr/bin/ld: unsquashfs.o: in function `create_inode':
unsquashfs.c:(.text+0x1058): undefined reference to `makedev'
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:24: unsquashfs-lzma] Error 1
make[1]: Leaving directory '/home/u/Videos/firmware-mod-kit-master/src/squashfs-2.1-r2'

查阅资料得到:

 #include <sys/sysmacros.h>

       dev_t makedev(unsigned int maj, unsigned int min);

       unsigned int major(dev_t dev);
       unsigned int minor(dev_t dev);

于是按照相同的思路,添加#include <sys/sysmacros.h>。一路改下去。
但是出现了一个目前还挺难改的东西。在一个文档中有un的全局变量声明,但是他就是undefined。

//针对缺少major、minor、makedev添加这个头文件
#include <sys/sysmacros.h>
//对于swap和其他符号未定义的,一般来说添加或者去掉extern即可
int swap, silent = TRUE;
//上文替换成下文
extern int swap;
int silent = TRUE;

是出现了一个目前还挺难改的东西。在一个文档中有un的全局变量声明,但是他就是undefined。这个问题,在firmware-mod-kit-master/src/others/squashfs-3.2-r2-hg612-lzma/squashfs3.2-r2/squashfs-tools路径里面的extern struct sqlzma_un un;的extern去掉即可,然后make clean一下,再试着编译,中间还会遇到很多上述问题,但是都适用相同的解决方法进行操作。

/usr/bin/ld: mksquashfs.o: in function `scan1_single_readdir':
mksquashfs.c:(.text+0x1bf): undefined reference to `add_dir_entry'
/usr/bin/ld: mksquashfs.o: in function `scan1_encomp_readdir':
mksquashfs.c:(.text+0x79de): undefined reference to `add_dir_entry'
/usr/bin/ld: mksquashfs.o: in function `dir_scan1':
mksquashfs.c:(.text+0x9ceb): undefined reference to `add_dir_entry'
collect2: error: ld returned 1 exit status
make[3]: *** [Makefile:17: mksquashfs] Error 1
make[3]: Leaving directory '/home/u/Videos/firmware-mod-kit-master/src/others/squashfs-3.4-cisco/squashfs-tools'
make[2]: *** [Makefile:4: all] Error 2
make[2]: Leaving directory '/home/u/Videos/firmware-mod-kit-master/src/others/squashfs-3.4-cisco'

这是编译到后面的新的报错,

//把前面的inline去掉即可
void add_dir_entry(char *name, char *pathname, struct dir_info *sub_dir, struct inode_info *inode_info, void *data, struct dir_info *dir)

遇到这个问题直接注释掉就行了。

unsquashfs.c:26:10: fatal error: sys/sysctl.h: No such file or directory

遇到这个问题

/usr/bin/ld: /tmp/cchhufaa.o:/home/u/Videos/firmware-mod-kit-master/src/webcomp-tools/common.h:51: multiple definition of `globals'; common.o:/home/u/Videos/firmware-mod-kit-master/src/webcomp-tools/common.h:51: first defined here

遇到定义和变量的声明放到同一个文件common.h里面了,这时候将common.h里面globals删掉,然后分别在common.c文件和webdecomp.c文件里面添加struct global globalsextern struct global globals
基本上到这里可以一遍过。

./build-firmware.sh ./output/ ./rootfs/

懒人包

Github懒人包

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

firmware-mod-kit Ubuntu22.04编译通过 的相关文章

随机推荐

  • 计算机组长原理,期末项目考核-计算机组成原理-组长学号-组长姓名

    2012 2013 第一学期第一学期 计算机组成原理计算机组成原理 期末考核期末考核 职位姓名学号在项目中担任的工作成绩 组长 组员 组员 组员 一 项目一 项目 1 描述 描述 设 CPU 共有 16 根地址线 8 根数据线 R W 作读
  • 山洪灾害预警方案(山洪预警解决方案的组成)

    随着气候变化的不断加剧 山洪灾害在许多地区成为了极具威胁性的自然灾害之一 为了帮助地方政府和居民更好地预防和应对山洪灾害 我们设计了一套基于星创易联的SR600工业路由器和DTU200的山洪灾害预警方案 并成功在某地区进行了部署 案例背景
  • Transaction rolled back because it has been marked as rollback-only 解决办法

    今天早上高高兴兴上班 居然收到一大堆报警信息 仔细看了一下具体内容 都在提示这个错误 Transaction rolled back because it has been marked as rollback only 我一看就觉得奇怪了
  • Linux I/O编程 实验内容

    一 实验目的 练习用UNIX I O进行文件读写的编程方法 用UNIX I O函数管理文本信息 二进制数据 结构体数据 掌握UNIX I O的基本编程方法 练习测时函数使用 通过测量UNIX I O函数运行时间 建立UNIX I O API
  • 数据结构 ——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现

    一 基本概念 每个结点最多有两棵子树 左子树和右子树 次序不可以颠倒 性质 1 非空二叉树的第n层上至多有2 n 1 个元素 2 深度为h的二叉树至多有2 h 1个结点 满二叉树 所有终端都在同一层次 且非终端结点的度数为2 在满二叉树中若
  • 牛客网 HJ96 表示数字

    牛客网 HJ96 表示数字 将一个字符中所有的整数前后加上符号 其他字符保持不变 连续的数字视为一个整数 import re def deal with match value match group value return value
  • Pix2PixHD 阅读笔记(翻译)

    High Resolution Image Synthesis and Semantic Manipulation with Conditional GANs 作者 Ting Chun Wang NVIDIA Ming Y u Liu NV
  • C++扫雷小游戏

    核心算法 就是关于点击雷区的操作 data数组用来储存雷区 雷9 非雷非数字 0 数字 1 8 clickdata数组用来储存雷区是否被按过 没按过 0 左键按过 1 右键按过 2 int click int i int j int k 点
  • LeetCode200—岛屿数量(java版)

    题目描述 标签 深度优先搜索 广度优先搜索 并查集 数组 矩阵 给你一个由 1 陆地 和 0 水 组成的的二维网格 请你计算网格中岛屿的数量 岛屿总是被水包围 并且每座岛屿只能由水平方向和 或竖直方向上相邻的陆地连接形成 此外 你可以假设该
  • drools 7.x 决策表转drl

    1 决策表内容 位置 Users lcc IdeaProjects drools test src main resources com drools excel table test1 personAge xlsx 内容 RuleSet
  • html5多个图片位置_React 实现简易的图片拖动排序

    基本介绍 在 web 页面中 如果需要改变多个元素的位置 可以通过元素拖动来实现 HTML5中加入了一个全局属性draggable 通过设置该属性的值为 true false 来控制元素是否可拖动 需要注意的是 链接和图片默认是可拖动的 可
  • Linux之vi编辑器的使用方法和常用命令

    Linux之vi编辑器 前言 对于初级程序开发工程师而言 Linux是很多人要接触的内容 为此我给大家来做一下总结 希望能够帮到你们 课程说明 1 介绍vi编辑器的使用方法 2 介绍vi编辑器的常用命令 vi编辑器 vi的基本概念 基本上v
  • 高德地图开发-常用api踩坑使用

    一 高德地图的加载初始化 在这就踩过很多坑 新建项目正常显示没问题 放到我们的项目就是不显示 加载不出来 这个时候不要慌 只要确保下面三部完成就莫问题了 1 引入高德地图开发者api 生成key的方式自行百度 一大堆 下面是我的 我开发的时
  • 同步代码块 synchronized

    一 线程的同步 原因 Java允许多线程并发执行 当多个线程同时操作一个可共享资源时 将会导致相互之间产生冲突 因此加入同步锁来避免该线程没有完成操作之前 被其他线程的调用 从而保证该资源的唯一性和准确性 三种实现同步方式 同步代码块 同步
  • python-pcl可视化

    读取pcd文件 path test pcd pcd cloud pcl load path print cloud size print 共计 str cloud width cloud height 个点 for i in range 0
  • springboot自定义jackson序列化,默认null值个性化处理返回值

    转载 https www cnblogs com guoxiaoyu p 13667961 html 最近在项目中遇到 返回对象和属性为null时 接口不返回这个字段 但在实际中即使这个字段为null也是需要返回的 也试了好多 加json注
  • 解析库Beautiful Soup的使用

    文章目录 1 简介 2 准备工作 3 解析器 4 基本用法 5 节点选择器 选择元素 提取信息 嵌套选择 关联选择 6 方法选择器 find all find 7 CSS选择器 嵌套选择 获取属性 获取文本 这篇文章我们来介绍一个强大的解析
  • 华为手机一键刷新在哪里_颜值高口碑好的四款华为手机,双十一值得剁手

    最近双十一活动如火如荼的进行着 有换新手机打算的你还在等什么呢 现在国内5G发展迅速 用4G手机的你想必也想体验一下更快更强的5G 一部分用户想入手iphone12 安卓阵营则更倾向于性价比质量好的国产华为 但小编建议大家双11也要擦亮眼睛
  • Vue项目打包部署总结

    关注 程序员成长指北 回复 1 加入我们一起学习 天天进步 来源 https wintc top article 29 使用Vue做前后端分离项目时 通常前端是单独部署 用户访问的也是前端项目地址 因此前端开发人员很有必要熟悉一下项目部署的
  • firmware-mod-kit Ubuntu22.04编译通过

    初步了解 初步了解了一下固件打包 发现一般都是有专门的打包工具 openwrt有一个项目是lede 在Github上面可以看到 先下载来看看 同时也查到一个名为firmware mod kit的项目 看样子好像早期打包的工具 说明文档里面说