Linux 学习笔记(未整理)
redhat 5.4中文显示乱码问题
安装
1、fonts-chinese-3.02-9.6.el5.noarch.rpm. 如果无法安装,则加个--force
2、fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm
多数人到了这里就没有做其它操作了,导致仍然无法正确显示中文。
3、cd /usr/share/fonts/
4、fc-cache -fv #
以上的两个步骤,才是成功完成的关键!所以这里要特别注意!重新启动系统即可
建立交叉编译环境
在Linux平台下,要为开发板编译内核,图形界面Qtopia/Qt4,bootloader,还有其他一些应用程序,均需要交叉编译工具链,我们使用的是arm-linux-gcc-4.5.1,它默认采用armv6指令集,支持硬浮点运算,下面是安装它的详细步骤。
Step1:将光盘Linux目录中的arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz复制到Fedora9某个目录下如tmp/,然后进入到该目录,执行解压命令:
#cd /tmp
#tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz –C /
注意:C后面有个空格,并且C是大写的,它是英文单词“Change”的第一个字母,在此是改变目录的意思。
执行该命令,将把arm-linux-gcc安装到/opt/FriendlyARM/toolschain/4.5.1目录。
Step2:把编译器路径加入系统环境变量,运行命令#gedit /root/.bashrc
编辑/root/.bashrc 文件,注意“bashrc”前面有一个“.”,修改最后一行为 export PATH=$PATH: /opt/FriendlyARM/toolschain/4.5.1/bin,注意路径一定要写对,否则将不会有效。保存退出。如果/root/.bashrc里面输入有误,后面会出现超级管理员权限下的部分命令不能使用。
重新登录系统(不必重启机器,开始->logout 即可),使以上设置生效,在命令行输入arm-linux-gcc –v,会出现GCC版本信息,这说明交叉编译环境已经成功安装。
VMware共享文件夹,只能拷出,不能拷入
[root@feiyinzilgd ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
修改后重启就OK
REDHAT安装时出现:This system is not registered with RHN.
红帽中出现This system is not registered with RHN这个的原因是因为红帽中没有注册RHN。解决办法:(假定你已安装yum,且网络畅通)更改yum的源,即更换/etc/yum.repos.d /rhel-debuginfo.repo 这个文件。进入/etc/yum.repos.d/目录,终端中输入wget http://docs.linuxtone.org/soft/lemp/CentOS-Base.repo即可在此目录下得到CentOS- Base.repo文件,这是centos的源文件,只需将其重命名为rhel-debuginfo.repo即可,以前的文件做个备份。
最简单的驱动程序hello
Mini6410_hello_module.c
#include <linux/kernel.h> #include <linux/module.h> static int __init mini6410_hello_module_init(void) { printk("Hello, Mini6410 module is installed !\n"); return 0; } static void __exit mini6410_hello_module_cleanup(void) { printk("Good-bye, Mini6410 module was removed!\n"); } module_init(mini6410_hello_module_init); module_exit(mini6410_hello_module_cleanup); MODULE_LICENSE("GPL");
PC环境:win7+VMwave10+redhat5.1
用mini6410开发板,厂家提供的原代码和编译器。
(1)把Hello,Module 加入内核代码树,并编译
一般编译2.6版本的驱动模块需要把驱动代码加入内核代码树,并做相应的配置,如下步骤( 注意:实际上以下步骤均已经做好,你只需要打开检查一下直接编译就可以了) :
Step1:编辑配置文件Kconfig,加入驱动选项,使之在make menuconfig的时候出现 打开linux-2.6.38/drivers/char/Kconfig 文件,添加如图所示:
保存退出,这时在linux-2.6.38 目录位置运行一下make menuconfig就可以在Device Drivers Æ Character devices 菜单中看到刚才所添加的选项了,按下空格键将会选择为<M>,此意为要把该选项编译为模块方式;再按下空格会变为<*> ,意为要把该选项编译到内核中,在此我们选择<M>,如图,如果没有出现,请检查你是否已经装载了缺省的内核配置文件。(M:就是做成模块,动态装入 *:就是直接编译到内核中,启动时装入)
Step2:通过上一步,我们虽然可以在配置内核的时候进行选择,但实际上此时执行编译内核还是不能把mini6410_hello_module.c 编译进去的,还需要在Makefile中把内核配置
选项和真正的源代码联系起来,打开 linux-2.6.38/drivers/char/Makefile ,如图添加并保存退出:
Step3:这时回到 linux-2.6.38 源代码根目录位置,执行 make modules ,就可以生成我们所需要的内核模块文件mini6410_hello_module.ko了,注意:执行make modules之前,必须先执行make zImage,只需一次就可以了。
至此,我们已经完成了模块驱动的编译。
在此使用ftp 命令把编译出的mini6410_hello_module.ko下载到板子中,并把它移动到/lib/modules/2.6.38-FriendlyARM 目录然后在板子中现在执行
#modprobe mini6410_hello_module
可以看到该模块已经被装载了( 注意:使用 modprobe命令加载模块不需要加“ko”尾缀)
注意:两种加载方式insmod和modprobe的区别
1、insmod一次只能加载特定的一个设备驱动,且需要驱动的具体地址。写法为:
insmod drv.ko
2. modprobe则可以一次将有依赖关系的驱动全部加载到内核。不加驱动的具体地址,但需要在安装文件系统时是按照make modues_install的方式安装驱动模块的。驱动被安装在/lib/modules/$(uname -r)/...下。写法为:
modprob drv
再执行以下命令,可以看到该模块被卸载
#rmmod mini6410_hello_module
注意:要能够正常卸载模块,必须把模块放入开发板的/lib/modules/2.6.38-FriendlyARM 目录
另外需要注意的是:因为我们的内核有时会升级更新,如果内核版本已经改变,请依照具体的内核版本重新建立一个模块存放目录,在此为/lib/modules/2.6.38-FriendlyARM
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。