make your driver as a deb package

本文详细介绍了如何从零开始制作Debian软件包,包括设置环境变量、生成deb的架子、修改control文件、添加脚本文件以及打包过程。同时,文章也提到了修改现有包的方法,并解释了依赖冲突的解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做完自己的开发之后,想要发布自己的代码,怎么办呢,比如如何给已有的系统打补丁,或者作为一个安装包在新部署的系统环境中存在呢?

其实要分情况,如果是社区兼容性的东西(符合社区blueprint),能够被社区admin review通过的,当然直接提交到社区比较合适;如果是自己特有的功能,仅仅是少数几个

文件的修改,使用diff/patch 将改动做成patch,之后apply 即可,如果涉及到文件的增删改,同时相对比较多的时候,且希望使用例如puppet之类的部署工具,作为

一个模块将自己的改动部署掉,则需要打包了,centos上就打rpm包,ubuntu则需要打deb的包,这两天打deb包的过程record一下,以后还可能用,rpm的遇到再说。

事实上deb的包里面内容还是挺多的,有很多种用法,一下是我经验证可以的方式,不一定最佳。

第一种方式. 从零开始制作自己的包:

1. sudo apt-get install packaging-dev dh-make 安装需要的包

2.设置环境变量,这些内容将在deb包中的control文件中出现

DEBEMAIL="your_email_address@domain.com"

DEBFULLNAME="Your Name"

export DEBEMAIL DEBFULLNAME

3.生成deb的架子,各个参数的意义可以使用dh_make --help查看

dh_make -i -n -p packagename_1.0.0 -c gpl2, 生成的目录中ex和EX结尾的文件可以删除

4. 修改control文件,在Depends字段添加该包的依赖,可以修改Section等,不过不修改也没关系,

5. 添加postinst, postrm, preinst三个script文件,实际上是三个脚本(#!/bin/sh),其中preinst是安装开始前做准备的工作,比较在/usr/share下生成一个目录,

删除某个目录,或者做一些检查之类的;postinst是安装之后做一些动作,同样可以增删改文件,重启服务等; postrm表示使用"dpkg -P" 卸载包时做的动作,

一般会将安装时做的修改回退,比如删除添加的文件和目录,使用patch -R,回退修改等。

6. 添加install文件,此文件中内容为“pathA pathB”, 中间以空格隔开的多行数据,表示将pathA下的内容拷贝到pathB下,安装过程会做很多的拷贝,就写在这里,

拷贝的时候pathA的路径是相对路径,比如packagename下面有debian目录和‘test’ 目录,要将test目录中的文件test.txt移到/etc/init.d下,则写为:

“test/test.txt /etc/init.d/”

7. 在packagename目录中运行“debuild -us -uc”, 则在和packagename同级目录生成所需的deb包, 其中us 和uc参数表示不使用GPG签名包。


第二种方式.修改现有的包:

找一个包,解压后修改然后重新打包,有时候更方便,同时如果用第一种方式做的包,结果发现有点儿问题,重新做太麻烦,就用第二种了。

1. 使用 “dpkg -X test.deb test”, 将test.deb解压到testmul

2. mkdir test/DEBIAN, 创建目录,这里DEBIAN是大写,使用小写的debian不识别,创建包的时候用命令生成的是debian的目录,可能跟第一种和第二种做包

的命令不同有关,没继续研究了。

3. 使用“dpkg -e test.deb test/DEBIAN” 将打包过程的信息解压到test/DEBIAN中

4. 在test/DEBIAN中有control,md5sums,postinst, postrm, preinst, 和做包时候的内容一致,做包时候的install文件中的内容在第一步生成的test目录下,

打开其对应的路径,发现其内容是install执行copy之后的实际文件位置

5. 修改control,postinst,postrm,preinst

6. 修改完成后在test同级目录执行“dpkg-deb -b test .”, 则在test同级目录生成test.deb


依赖冲突解决:

无论安装rpm还是deb的包经常遇到各种冲突,比如系统安装的包的版本和“control文件中Depends中定义的不匹配”等,

保险的情况下当然是升级系统的版本,但是各种依赖交叉,会让安装的过程变得很头疼,事实上,有些依赖并不是那么严格,

比如一些小版本等等,为了让安装变得顺利,我们可以将包解压,修改control中的Depends字段,重新打包之后安装。

当然了,除非你对版本之间的差异特别情况,否则请严格测试,否则这样的方式并不推荐。


mark link:

https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html

ubuntu安装无线网卡显示准备解压 aic8800d80fdrvpackage.deb ... Uninstall aic8800 wifi driver!!!!! rmmod: ERROR: Module aic8800_fdrv is not currently loaded rmmod: ERROR: Module aic_load_fw is not currently loaded /bin/sh: 1: test: -lt: unexpected operator rm -rf *.o *.ko *.o.* *.mod.* modules.* Module.* .a* .o* .*.o.* *.mod .tmp* .cache.mk .modules.order.cmd .Module.symvers.cmd /bin/sh: 1: test: -lt: unexpected operator rm -rfv /lib/modules/6.12.1-061201-generic/kernel/drivers/net/wireless/aic8800/aic8800_fdrv.ko /sbin/depmod -a 6.12.1-061201-generic rm -rf *.o *.ko *.o.* *.mod.* modules.* Module.* .a* .o* .*.o.* *.mod .tmp* .cache.mk .modules.order.cmd .Module.symvers.cmd rm -rfv /lib/modules/6.12.1-061201-generic/kernel/drivers/net/wireless/aic8800/aic_load_fw.ko /sbin/depmod -a 6.12.1-061201-generic rm *.o wifi_test bt_test rm: 无法删除 '*.o': 没有那个文件或目录 rm: 无法删除 'wifi_test': 没有那个文件或目录 rm: 无法删除 'bt_test': 没有那个文件或目录 make: *** [Makefile:19:clean] 错误 1 Install aic8800 wifi driver!!!!! 正在解压 aic8800d80fdrvpackage (0.0.3) 并覆盖 (0.0.3) ... Uninstall aic8800 wifi driver successful!!!!! 正在设置 aic8800d80fdrvpackage (0.0.3) ... udev done device not exist cp fw done x86_64 make -C /lib/modules/6.12.1-061201-generic/build M=/usr/src/AIC8800/drivers/aic8800 ARCH=x86_64 CROSS_COMPILE= modules make[1]: 警告: jobserver 不可用: 正使用 -j1。添加 “+” 到父 make 的规则。 make[1]: *** /lib/modules/6.12.1-061201-generic/build: 没有那个文件或目录。 停止。 make: *** [Makefile:59:modules] 错误 2 make failed, install aic8800 wifi drvier failed dpkg: 处理软件包 aic8800d80fdrvpackage (--install)时出错: 已安装 aic8800d80fdrvpackage 软件包 post-installation 脚本 子进程返回错误状态 1 在处理时有错误发生: aic8800d80fdrvpackage 这是怎么回事,需要怎么解决
最新发布
03-14
<think>好的,我现在需要帮助用户解决在Ubuntu上安装aic8800无线网卡驱动时出现的错误。用户提到在安装过程中遇到了'make'报错和dpkg返回错误状态1的情况。我需要先理解用户的具体问题,然后结合提供的引用资料,给出有效的解决方案。 首先,用户提供的错误信息显示,在运行make install时,出现权限问题,用户root无法执行某个命令。这通常是因为用户没有足够的权限来执行安装步骤。根据引用[1],错误信息中提到用户无权以root身份执行操作,这可能是因为sudoers配置问题,或者用户没有正确使用sudo命令。因此,我需要建议用户检查是否使用了sudo,或者是否有权限配置问题。 接下来,用户还提到了dpkg处理软件包时出错,post-installation脚本返回错误状态1。这通常意味着安装后脚本执行失败,可能与驱动安装过程中的某些步骤未能正确完成有关。引用[2]和[3]提到了在Ubuntu上安装无线网卡驱动时的常见问题,比如依赖项未安装、内核头文件缺失等。因此,我需要建议用户安装必要的依赖项,如gcc、make、linux-headers等,并确保系统已更新。 另外,引用[4]提到重新编译驱动并安装后可能需要重启,并且插入设备后可以看到新的无线设备。这说明编译安装驱动可能需要手动操作,而不是通过deb包安装。而用户的问题中似乎涉及到deb包的安装失败,可能是因为deb包中的安装脚本调用了make命令,但权限或依赖项导致失败。因此,可能需要用户尝试手动编译驱动,而不是使用deb包。 引用[5]提到如何下载内核源码和编译内核,这可能与驱动编译时需要匹配的内核头文件有关。因此,确保linux-headers和内核版本一致也是关键步骤。 综合这些信息,解决方案可能包括以下步骤: 1. 安装必要的构建工具和依赖项。 2. 检查并配置sudo权限,确保安装过程中有足够的权限。 3. 手动下载驱动源码,编译并安装。 4. 处理可能的内核版本不匹配问题。 5. 检查dkms配置,确保驱动在系统更新后自动重新编译。 6. 如果使用deb包安装失败,尝试手动安装或联系开发者获取支持。 需要详细指导用户每一步操作,并注意可能的权限问题,比如使用sudo命令的正确方式。此外,用户可能需要确认驱动是否与当前内核版本兼容,必要时升级或降级内核。同时,处理依赖项时,可能需要启用universe仓库,并更新软件包列表。 还需要考虑用户可能遇到的常见陷阱,例如未安装正确的linux-headers版本,或者驱动源码中的Makefile配置错误。建议用户在编译前仔细阅读驱动的文档,确保所有步骤正确执行。如果问题仍然存在,可能需要查看详细的编译日志,或者寻求社区支持,如引用[3]中提到的问题,用户可能需要参考其他社区资源或联系驱动开发者。</think>### 分步解决方案 #### 1. 安装编译依赖项 首先确保系统已安装构建驱动所需的基础工具和内核头文件: ```bash sudo apt update sudo apt install -y build-essential dkms linux-headers-$(uname -r) git ``` 此步骤解决$Package\ gcc\ is\ not\ configured$等依赖问题[^2][^5]。 #### 2. 修复权限问题 错误提示$user\ root\ 无权以\ root\ 的身份执行操作$表明安装脚本未正确调用权限,尝试手动赋予权限: ```bash # 进入驱动源码目录 cd /path/to/aic8800/driver # 赋予执行权限 chmod +x install.sh # 如果存在安装脚本 sudo make clean sudo make sudo make install # 强制使用root权限执行 ``` 若仍报权限错误,检查`/etc/sudoers`文件是否限制用户权限[^1]。 #### 3. 手动编译驱动 若通过.deb包安装失败,尝试从源码手动编译安装: ```bash # 下载源码(需确认官方仓库地址) git clone https://github.com/aic8800/driver_source.git cd driver_source # 编译安装 sudo make sudo make install # 注册到DKMS(如有必要) sudo cp -R . /usr/src/aic8800-1.0 sudo dkms add -m aic8800 -v 1.0 sudo dkms build -m aic8800 -v 1.0 sudo dkms install -m aic8800 -v 1.0 ``` 此方法可绕过deb包安装脚本的问题[^4][^5]。 #### 4. 处理内核版本冲突 若驱动与当前内核版本不兼容: ```bash # 查看当前内核版本 uname -r # 安装对应版本的头文件 sudo apt install linux-headers-$(uname -r) # 若需降级内核,参考: sudo apt install linux-image-5.4.0-xx-generic ``` 需确保驱动支持当前内核版本。 #### 5. 检查驱动加载状态 安装完成后验证驱动是否加载: ```bash sudo modprobe aic8800 # 加载驱动模块 dmesg | grep aic8800 # 查看内核日志 ifconfig -a # 检查无线网卡接口(如wlan0) ``` 若接口未出现,尝试重启系统或重新插入设备。 #### 6. 修复dpkg错误 若deb包安装失败导致残留问题: ```bash # 清除损坏的包状态 sudo dpkg --purge ax300-wifi-adapter-linux-driver # 重新安装驱动(优先尝试源码安装) ``` ### 补充说明 - 若驱动源码未适配新内核,需手动修改Makefile中的内核路径 - 部分厂商驱动需禁用Secure Boot(在BIOS中设置) - 详细日志可通过`journalctl -u systemd-modules-load`查看驱动加载失败原因
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值