linux配置出错系统起不来及乱炖

最近遇到挺多linux配置中的问题,将其汇总,内容杂七杂八,权当乱炖,以飨来者!祝新年快乐!

1.Ubuntu开机出现:

piix4_smbus ****host smbus controller not enabled

解决方法:

执行:lsmod | grep i2c

root@localhost:/dev#lsmod | grep i2c
i2c_piix4               8143  0 
root@localhost:/dev#
vi /etc/modprobe.d/blacklist.conf

将i2c_piix4列入不加载模块列表,在blacklist.conf文件末尾添加:

blacklist i2c_piix4

重新生成引导文件/boot/initrd.img

执行:update-initramfs -u -k all

然后重启系统即可。

原因:

主机CPU是64位的,但安装的ubuntu是32位的。

2.编译gcc出现:

error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments

这是我在gcc-4.4版本下预安装低版本gcc-3.4.5时出现的现象;

解决方法:

编译时执行:

make “CFLAGS=-U_FORTIFY_SOURCE”

原因:

从gcc 4.0开始,添加了一些扩展的检查功能,如buffer overflow,ignoring return value等等,早在feroda core 4中,redhat就已经默认打开了gcc的这个扩展,并在此基础上编译了fc4的几乎所有软件;ubuntu直到8.10版本才使能这个功能;     
但是这个功能打开之后会造成很多程序编译不过,比如gcc:(,解决方法就是在编译的时候禁止掉fortify扩展: 

3.linux自动挂载共享文件夹(请完整看完本节):

当我在虚拟机中的Ubuntu中的/mnt/hgfs/文件夹中查看之前共享的文件夹时发现该共享的文件夹竟然不不见了。晕...仔细查看了网络连接状况,虚拟机和主机相互间都能ping通,并且重新设置更换了文件夹,并给该文件夹较大的访问权限,都不行,随后想,既然/mnt/hgfs没有共享的文件夹,随性就挂载一个,执行:

 mount -t cifs -o username=YOUR_USERNAME,password=YOUR_PASSWORD //HOME_HOST_IP/share /mnt/hgfs/mnt

随后出现:CIFS VFS: cifs_mount failed w/return code = -22

经查资料原来是samba_client没有安装,执行:

apt-get install samba-client

如果你没有安装samba还需要安装:

apt-get install smaba

完后,再次执行上述挂载命令,共享文件夹恢复正常。

但上述操作只是临时的,重启后又恢复正常,需在/etc/fstab文件中添加如下行:

//HOME_HOST_IP/share /mnt/hgfs/mnt cifs username=YOUR_USERNAME,password=YOUR_PASSWORD,rw 0 0

据@Aenon,你也可以在~/.bashrc中添加

alias xxx=‘mount -t smbfs -o username=Administrator.password=*** //HOME_HOST_IP/share /mnt/hgfs/mnt‘

这样当你需要挂载共享文件夹时执行xxx即可,不用每次开机都挂载。

卸载挂载文件夹:umount /mnt/hgfs/mnt/

执行:net share可以查看电脑主机共享的文件夹。

我已经在VM中设置了共享的文件夹,以前都是自动挂载,可以直接在/mnt/hgfs中看到的,不晓得现在是什么原因。

今天终于找到原因了,是由于VMtools的问题,将VMtools重新安装了一遍就ok了。无语呀。

进入VM菜单VM/Reinstall VMware tools..

之后会在/dev/cdrom1(具体可查看自己目录中的名称)中有该工具的安装包,将其挂载在/mnt/VMtools/目录下。

mount /dev/cdrom1 /mnt/VMtools

进入/mnt/VMtools可查看挂载的文件

将VMwareTools-9.2.3-1031360.tar.gz安装包拷贝到另外一个文件夹内(在挂载的地方是不能解压的)然后解压:

tar zxvf VMwareTools-9.2.3-1031360.tar.gz

进入:cd vmware-tools-distrib

执行:

./vmware-install.pl

然后一路ENTER默认安装即可,随后你就可以在/mnt/hgfs文件夹下看到你的共享文件夹了。就这么简单的事我折腾了这么长时间。晕...

上面的在/etc/fstab中添加挂载文件的方式我觉得不是一个好方法,一旦你主机使用动态ip,那么下次开机的时候ip就变了。那么你虚拟机中的ubuntu就启动不起来了。它会提示挂载出错。怎么搞都起不来,以前用的比较二的办法是重新安装,现在学到了新的办法哈。

4.文件配置出错 linux启动不起来

重启虚拟机系统,在启动时按着shift不动,此时会弹出类似如下界面,即进入grub:

linux配置出错系统起不来及乱炖

按“e”键进入命令行编辑模式,会弹出如下界面:

linux配置出错系统起不来及乱炖

在上图的第二行添加如下:

init=/bin/bash

然后按Ctrl-x继续启动,系统会跳过挂载出错,继续执行,进入命令行后赶紧修正你的配置信息吧!修复完重启即可。

5.切换tab键提示:

每次执行命令时,按tab键使用补全功能,都会弹出类似下面那一段,晕呀。

cd sour-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8:zh_CN.GB2312)

解决办法:
apt-get purge locales
apt-get autoclean
apt-get install locales
cd /usr/share/locales
./install-language-pack en_US.UTF-8
dpkg-reconfigure locales

修复完成
运行locale查看相关信息.

感谢:http://www.xdty.org/912

6.scull编译问题:

LDDR3中使用的内核代码是2.6.10,现在新的linux已经有了变化,在编译过程中遇到一些问题,这篇文章中的描述基本都解决了。

A:提示:

问题:scripts/Makefile.build:46:*** CFLAGS was changed in "/home/chenfang/scull/Makefile",Fix it use EXTRA_CFLAGS.Stop.:

解决:将Makefile中的CFLAGS修改为EXTRA_CFLAGS

B:提示:

问题:main.c找不到linux/config.h,

解决:将main.c中的config.h修改为autoconf.h

C:提示:

问题:make[2]: *** [/home/libin/project/ldd3/examples/scull/pipe.o] 错误 1
make[1]: *** [_module_/home/libin/project/ldd3/examples/scull] 错误 2

解决:在pipe.c中添加#include<linux/sched.h>

D:提示:

问题:make[2]: *** [/home/libin/project/ldd3/examples/scull/access.o] 错误 1

make[1]: *** [_module_/home/libin/project/ldd3/examples/scull] 错误 2

解决:在access.c添加 <linux/sched.h>

E:提示:

/home/cs/lddr/lddr/scull/access.c: In function ‘scull_w_open‘:

/home/cs/lddr/lddr/scull/access.c:185: error: ‘struct task_struct‘ has no member named ‘uid‘
make[2]: *** [/home/cs/lddr/lddr/scull/access.o] Error 1
make[1]: *** [_module_/home/cs/lddr/lddr/scull] Error 2

解决:将access.c中的

current->uid 修改为 current->cred->uid
current->euid 修改为 current->cred->euid

然后再编译即可。

7.ubuntu字体

多谢@Dean Chen的分享

root@localhost:/home/cs/lddr/lddr/scull#locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US
LANGUAGE=
LC_CTYPE="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_COLLATE="en_US"
LC_MONETARY="en_US"
LC_MESSAGES="en_US"
LC_PAPER="en_US"
LC_NAME="en_US"
LC_ADDRESS="en_US"
LC_TELEPHONE="en_US"
LC_MEASUREMENT="en_US"
LC_IDENTIFICATION="en_US"
LC_ALL=

根据该文的提示,在/etc/profile文件末尾添加:

export LC_ALL=C

执行#source /etc/profile

执行locale查看

即可。

若缺失字体,执行字体安装命令:

apt-get --reinstall install language-pack-en  

字体更新命令:

update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8  

水平有限,还望多多指教!

Dean Chen

linux配置出错系统起不来及乱炖

上一篇:X-Cart 学习笔记(三)X-Cart框架2


下一篇:使用Apworks开发基于CQRS架构的应用程序【领域事件】