(二)嵌入式 Linux驱动程序设计之make menuconfig图形化配置及问题解决

liunx编译:make menuconfig报错及apt时无法获得锁 /var/lib/apt/lists/lock - open

接上篇(一)嵌入式 Linux驱动程序设计之驱动模块编译
一.无法获得锁 /var/lib/apt/lists/lock - open

查看一下是否有使用apt-get的程序,终端输入:ps
-aux,找到使用apt-get的程序(最后一列),查看其PID号,然后杀死其进程,输入sudo kill PID.

用sudo apt-get update时出现“ E: 无法获得锁 /var/lib/apt/lists/lock”错误。

在网上搜索到的解决方案──“将/var/lib/apt/list/lock删除掉即可”──其实是一种极端的情况,也就是在上次更新没有正常关闭的情况下使用。

在大部分情况下,问题的原因在于其它的程序如系统的自动更新、新立得等正在使用apt-get进程,所以解决方法也就是将这一进程关闭。

具体如下:
1、ps-aux 查出apt-get进程的PID,通常是一个四位数字。
2、用sudo kill PID代码 杀死进程
3、用sudo apt-get update,sudo apt-get dist-upgrade升级。
方法一:
执行一下 sudo dpkg --configure -a
方法二(亲测可以用):
sudo rm /var/lib/apt/lists/lock
方法三:
1、ps-aux 查出apt-get进程的PID,
2、用sudo kill PID代码 杀死进程(我都是找出带apt字样的进程格杀勿论)

---------------------------分割线---------------------------
E:Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
出现这个问题的原因可能是有另外一个程序正在运行,导致资源被锁不可用。而导致资源被锁的原因,可能是上次安装时没正常完成,而导致出现此状况。
解决方法:输入以下命令
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
之后再安装想装的包,即可解决
今天玩Ubuntu的时候,在弄更新源的时候,突然出现以下错误:
 
[1]+ Stopped                sudo apt-get update
www.linuxidc.com@linux:~$ sudo apt-get update
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the list directory
 
开始以为是权限不够,就是用 sudo apt-get update,发现还是报错,问题没有解决。于是上网搜索了一下,答案如下:
问题应该是之前那个更新被强制取消的问题,进程仍然还在。用这个命令查看一下:
ps -e | grep apt
显示结果如下:
6362 ? 00:00:00 apt
6934 ? 00:00:00 apt-get
7368 ? 00:00:00 synaptic 
然后就执行
sudo killall apt
sudo killall apt-get
sudo killall synaptic
再次在终端里查看ps -e | grep apt 没有任何结果了
继续执行sudo apt-get update
OK! 
原因:刚装好的Ubantu系统,内部缺少很多软件源,这时,系统会自动启动软件源更新进程“apt-get”,并且它会一直存活。由于它在运行时,会占用软件源更新时的系统锁(以下称“系统更新锁”,此锁文件在“/var/lib/apt/lists/”目录下),而当有新的apt-get进程生成时,就会因为得不到系统更新锁而出现"E: 无法获得锁 /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)"错误提示!因此,我们只要将原先的apt-get进程杀死,从新激活新的apt-get进程,就可以让新立德软件管理器正常工作了!
这时,你可以按一下步骤来解决:
1、输入以下命令:“ps -aux  > temp.txt”.敲回车确定。这时会有“warning”出现,但不予理会。
2、输入以下命令:“grep -n apt-get temp.txt”键入回车确定。而后从命令输出中找到 apt-get 进程的PID。
3、输入以下命令:“sudo kill <PID>”。
4、完成。
or
如果提示错误:E: Could not get lock /var/lib/dpkg/lock - open (11 Resource temporarily unavailable)
输入
 sudo rm /var/lib/apt/lists/lock 即可
祝好运!

---------------------------分割线---------------------------
linuxidc@ubuntu:~$ sudo apt-get update
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
linuxidc@ubuntu:~$ sudo apt-get update
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
linuxidc@ubuntu:~$ sudo apt-get update
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
linuxidc@ubuntu:~$ sudo apt-get update
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
linuxidc@ubuntu:~$
linuxidc@ubuntu:~$ sudo rm /var/cache/apt/archives/lock
linuxidc@ubuntu:~$ sudo rm /var/cache/apt/archives/lock
rm: cannot remove ‘/var/cache/apt/archives/lock’: No such file or directory
linuxidc@ubuntu:~$ sudo rm /var/lib/dpkg/lock
linuxidc@ubuntu:~$

二、编译linux内核时,执行make menuconfig,显示错误
进入make menuconfig图形化界面:先进入到内核源码路径下,输入命令make menuconfig即可

错误1及解决办法
在这里插入图片描述 错误2
在这里插入图片描述解决办法(apt出错看第一条)
在这里插入图片描述错误3及解决办法
在这里插入图片描述错误4
在这里插入图片描述解决办法
窗口太小了,无法运行Menuconfig!=o=
直接把终端窗口最大化;结果如下
在这里插入图片描述

make menuconfig界面操作
1.搜索功能
输入"/"即可弹出搜索界面,输入要搜索内容即可.
2.方向键移动光标,回车为确认
3.配置驱动的状态
3.1把驱动编译为模块,用M表示
3.2把驱动编译到内核里面,用*表示
3.3不编译,无内容
通过空格设置以上三种状态
4.退出
分为:保存退出与不保存退出.

make menuconfig有关的文件
Makefile:里面是编译规则,告诉我们在make时怎么编译;相当于怎么做菜.
kconfig:内核配置选项;相当于菜单.
.config:配置完内核后生成的配置选项,相当于点的菜.

make menuconfig会读取Arch/$ARCH/目录下的kconfig;可以通过make menuconfig界面左上角为ARM还是linux等判断.
Arch/arm/configs#下面有好多配置文件,相当于这个饭店的特色菜.在移植内核时,如果配置选项太多就可以将此路径下任意一个配置文件复制到源码根路径下并命名为.config
为什么要复制为.config,因为内核会默认读取linux内核根路径下.config作为配置选项.
当复制的.config不完全符合我们要求时,使用make menuconfig界面进行配置即可,配置完成后会自动更新到.config里面.

与Makefile文件建立关系?
当我们make menuconfig界面配置保存后,linux会将所有选项以宏定义形式保存在include/generated/autoconf.h里面.

编译linux时出现找不到头文件,需要查找对应库并安装即可,如下
在这里插入图片描述

使用命令 sudo make -j4  可以节省时间编译内核;
编译完成后使用命令 sudo make modules_install安装模块;
最后使用命令sudo make install 安装kernel
可以重启系统在grub选择高级可以看到编译好的Linux新版本和之前版本Linux

[参考](https://blog.csdn.net/qq_28437139/article/details/83692907)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值