在ubuntu12.04下编译linux内核
基于Qt的室内环境监测系统设计与实现
基于Qt的室内环境监测系统设计与实现李超;程小劲【摘要】随着计算机技术的发展,基于计算机技术的嵌入式设备越来越多地应用于生产生活中.而在家庭居住方面,越来越多的智能化,便捷化的产品,为人们提供了一个安全、舒适和便捷的环境,从而也越来越受到市场的青睐.基于计算机和嵌入式技术,运用Qt开发平台,设计了一套室内环境监测系统,实现了一种可以实现较低成本,使用范围广泛,主要应用于家庭环境监测的控制系统.该系统具有实现用户的注册登录,实时查看当前的室内环境参数,查看监控信息,设置各种参数的阈值,超出阈值进行报警等功能.上位机采用CortexA9运行主程序,下位机采用意法半导体生产的STM32.下位机和上位机之间通过RS232串口通信,下位机通过该串口将采集到的数据传给上位机.上位机通过TCP/IP协议传给Qt进行实时显示.【期刊名称】《计算机技术与发展》【年(卷),期】2019(029)004【总页数】4页(P204-207)【关键词】Qt;计算机技术;嵌入式技术;环境监测;TCP/IP;RS232【作者】李超;程小劲【作者单位】上海工程技术大学机械工程学院,上海 201620;上海工程技术大学机械工程学院,上海 201620【正文语种】中文【中图分类】TP230 引言煤气、天然气是现代家庭主要能源之一。
由于煤气、天然气的泄露导致的中毒和火灾是高层住宅的重大隐患,每年因为燃气泄露造成的火灾数不胜数。
随着经济的发展和人民生活水平的不断提高,各式各样的原材料制成的装修材料进入家庭,而随之释放出来的有害气体时刻威胁着大家的安全。
其中甲醛是最为常见的有害气体之一,具有强烈的致癌性[1]。
与此同时,PM2.5也时刻威胁着家庭成员的健康[2]。
目前,室内环境参数监测系统的多数功能较为单一,完成一个完整的监测系统需要使用多个产品。
对此,文中将传统的监控系统和环境监测系统融合在一起,实现环境参数查询、监控查询一体化。
与此同时,还可以对参数进行阈值设置,当环境里的参数值超出阈值后会及时提醒,该系统可以满足大多数室内环境的监测要求。
ubuntu12.04 升级内核实战
ubuntu12.04 升级内核实战ubuntu 12.04内核是linux 3.2.0-24,其实升级到最新版本3.3.4也没什么很大意义,主要是集成了一些新的驱动和一些普通用户用不到的功能,所以基本上本文纯属折腾,但不要随便升级当班设备啊!好了,不废话了,我们开始...........首先是准备条件:①、有一台装有ubuntu 12.04的机器②、先移步到/下载linux稳定版内核③、拥有root权限④、并将下载好的内核解压到/usr/src下,使用命令如下:#tar jxvf linux-3.3.4.tar.bz2这样你就可以得到一个名叫linux-3.3.4好,现在一切都准备好了,接下来就开始配置,编译,安装新内核吧!1,进入刚才的文件夹/usr/src/linux-3.3.4,输入命令:$ make mrproper该命令的功能在于清除当前目录下残留的.config和.o文件,这些文件一般是以前编译时未清理而残留的。
而对于第一次编译的代码来说,不存在这些残留文件,所以可以略过此步,但是如果该源代码以前被编译过,那么强烈建议执行此命令,否则后面可能会出现未知的问题。
2,配置编译选项作为操作系统的内核,其内容和功能必然非常繁杂,包括处理器调度,内存管理,文件系统管理,进程通讯以及设备管理等等,而对于不同的硬件,其配置选项也不相同,所以在编译源代码之前必须设置编译选项。
其实我觉得这一步是升级内核整个过程中最有技术含量的,因为要根据自己的需要正确选择yes or no需要对计算机方方面面的知识都有所了解。
但是这里的选项实在是太多了,大概有几百项之多,我以前曾尝试着一项一项的选,但是最后还是放弃了,因为有很多选项不是很明白。
既然这样,难道没有什么简便的方法么?当然有!那就是make menuconfig 或者make xconfig。
我使用的是make menuconfig,但是前提条件是要装ncurses。
LINUX内核模块编译步骤
LINUX内核模块编译步骤编译Linux内核模块主要包括以下步骤:1.获取源代码2.配置内核进入源代码目录并运行make menuconfig命令来配置内核。
该命令会打开一个文本菜单,其中包含许多内核选项。
在这里,你可以配置内核以适应特定的硬件要求和预期的功能。
你可以选择启用或禁用各种功能、设备驱动程序和文件系统等。
配置完成后,保存并退出。
3. 编译内核(make)运行make命令开始编译内核。
这将根据你在上一步中进行的配置生成相应的Makefile,然后开始编译内核。
编译的过程可能需要一些时间,请耐心等待。
4.安装模块编译完成后,运行make modules_install命令将编译好的模块安装到系统中。
这些模块被安装在/lib/modules/<kernel-version>/目录下。
5.安装内核运行make install命令来安装编译好的内核。
该命令会将内核映像文件(通常位于/arch/<architecture>/boot/目录下)复制到/boot目录,并更新系统引导加载程序(如GRUB)的配置文件。
6.更新GRUB配置文件运行update-grub命令来更新GRUB引导加载程序的配置文件。
这将确保新安装的内核在下次启动时可用。
7.重启系统安装完成后,通过重启系统来加载新的内核和模块。
在系统启动时,GRUB将显示一个菜单,你可以选择要启动的内核版本。
8.加载和卸载内核模块现在,你可以使用insmod命令来加载内核模块。
例如,运行insmod hello.ko命令来加载名为hello.ko的模块。
加载的模块位于/lib/modules/<kernel-version>/目录下。
如果你想卸载一个已加载的内核模块,可以使用rmmod命令。
例如,运行rmmod hello命令来卸载已加载的hello模块。
9.编写和编译模块代码要编写一个内核模块,你需要创建一个C文件,包含必要的模块代码。
内核编译的步骤
内核编译的步骤以内核编译的步骤为标题,写一篇文章。
一、概述内核编译是将操作系统内核的源代码转换为可以在特定硬件平台上运行的机器代码的过程。
通过编译内核,可以定制操作系统,优化性能,添加新的功能等。
二、准备工作1. 获取内核源代码:可以从官方网站或版本控制系统中获取内核源代码。
2. 安装编译工具链:需要安装交叉编译工具链,以便在主机上编译生成目标平台上的可执行文件。
3. 配置编译环境:设置编译选项,选择适合的配置文件,配置内核参数。
三、配置内核1. 进入内核源代码目录:在命令行中切换到内核源代码目录。
2. 启动配置界面:运行命令“make menuconfig”或“make config”启动配置界面。
3. 配置选项:在配置界面中,可以选择内核所支持的功能和驱动程序,根据需求进行配置。
例如,选择硬件平台、文件系统、网络协议等。
4. 保存配置:保存配置并退出配置界面。
四、编译内核1. 清理编译环境:运行命令“make clean”清理编译环境,删除之前的编译结果。
2. 开始编译:运行命令“make”开始编译内核。
编译过程可能需要一段时间,取决于硬件性能和代码规模。
3. 生成内核镜像:编译完成后,将生成内核镜像文件,通常为“vmlinuz”或“bzImage”。
4. 安装内核模块:运行命令“make modules_install”安装内核模块到指定目录。
五、安装内核1. 备份原始内核:在安装新内核之前,建议备份原始内核以防止意外情况发生。
2. 安装内核镜像:将生成的内核镜像文件复制到引导目录,通常为“/boot”。
3. 配置引导程序:根据使用的引导程序(如GRUB或LILO),更新引导配置文件,添加新内核的启动项。
4. 重启系统:重启计算机,并选择新内核启动。
六、验证内核1. 登录系统:使用新内核启动系统后,使用合法的用户凭证登录系统。
2. 检查内核版本:运行命令“uname -r”可查看当前正在运行的内核版本。
Ubuntu12.04下在Android4.0.4源码下载及其编译过程
Ubuntu12.04下在Android4.0.4源码下载及其编译过程一、下载源码1、下载工具repo:https:///tools/repo/在本地目录建个bin的文件夹,进入bin文件夹;通过git下载:1.git clone https:///tools/repo下载完成后,进入repo文件夹,切换到稳定分支:1.git checkout -b stable origin/stable将repo命令所在的目录,即/home/yourname/bin/repo添加到环境变量中:1.export PATH=$PATH:~/bin/repo在本地目录下新建目录:android4.0.4,并进入该文件夹:[html]view plaincopy1.cd ~;mkdir android4.0.4;cd android4.0.4;在文件夹下执行下面命令来下载Android源码:1.repo init -u https:///platform/manifest你也可以直接切换到你想要下的版本的分支,而不是“master”分支:1.repo init -u https:///platform/manifest -b android-4.0.4_r2关于到底是哪个分支,根据自己的情况而定,详情可参照:https:///platform/manifest/如你想下载最新的Android4.1代码,即可将分支名称更换成:android-4.1.1_r4你也可以参照官网的下载方式来下载:/source/downloading.html实验证明,我总是在下载那个repo工具的时候,无法连接到相应的地址。
下载是个漫长的过程,下载完成后的大小大概有14G,所以要提前准备好这么大的空间。
下载完成后的目录大概有这些:如图二、编译源码如果你的电脑的环境经常做开发,那么很多环境应该已经搭建好了,如果没有,可以参照官网:/source/initializing.html这里要提醒的是:用apt-get或者ubuntu软件中直接安装的jdk,jre的时候,编译Android是总是编译不过,出现JDK版本不一致的情况;解决办法如下:到oracle官网中下载jdk:/technetwork/java/javase/downloads/index-jsp-138363.html建议下载这个:jdk-6u35-linux-i586.bin下载完成后,运行得到一个jdk1.6.0_35文件夹,然后,将相应的JAVA环境加到系统环境中,简单的可以这样:1.vi ~/.bashrc在.bashrc文件最后添加:1.JAVA_HOME=/home/clw712/tools/jdk1.6.0_352.CLASSPATH=$JAVA_HOME/lib/3.ANDROID_PRODUCT_OUT=/home/clw712/bin/android/out/target/product/generic4.ANDROID=/home/clw712/bin/android5.ANDROID_SWT=/home/clw712/bin/android/out/host/linux-x86/framework6.PATH=$ANDROID/out/host/linux-x86/bin:$ANDROID/prebuilt/android-arm/kernel/:$JAVA_HOME/bin:$ANDROID_PRODUCT_OUT:$PATH7.8.export PATH JAVA_HOME CLASSPATH ANDROID_PRODUCT_OUT ANDROID_SWT当然上述路径还有后面编译好了,用到的路径,是用来运行emulator的。
虚拟机安装与Ubuntu12.04系统安装详细教程
虚拟机安装与Ubuntu系统安装详细教程2017-3-7 一、双击打开“家庭仿真所有文件”文件夹。
二、安装虚拟机(vmware-workstation)。
1.解压缩“vmware-workstation-9.0.0-官方原版-带注册机-汉化包”文件。
2.单机左上角“解压到”。
3.点击确定,完成解压。
4.生成文件夹“vmware-workstation-9.0.0-官方原版-带注册机-汉化包”。
5.双击打开“vmware-workstation-9.0.0-官方原版-带注册机-汉化包”文件夹。
6.双击打开“VMware-workstation-9.0.0-812388.exe”。
7.点击“next”。
8.单击“typical”。
9.单击“next”。
10.把上面钩钩去掉,然后点击“next”。
11. 把上面钩钩去掉,然后点击“next”。
12. 把上面钩钩去掉,然后点击“next”。
13.点击“continue”。
14.开始安装。
15.提示输入序列号。
16 . 双击打开“注册机@VM9 Keygen_zh-hans.exe”。
17 . 复制上述序列号,然后输入到安装文件中。
18 . 单击“Enter ”。
19.单击“Finish”完成安装。
20.汉化(即把英文变成中文,英语好的同学可以跳过)。
双击“汉化补丁包@VMware Workstation 9.0.0.812388(9.0.0.31680)精致汉化中英双语.exe”文件。
21 . 单击“下一步”。
22.继续单击“下一步”。
23 . 继续单击“下一步”。
24.单击“安装”。
25 . 把上面钩钩去掉,然后点击“完成”,完成汉化工作。
26 . 虚拟机安装完成。
三、安装Ubuntu 系统。
1 . 双击桌面的“VMware Workstation”图标,开启虚拟机。
2.单击左上角“新建虚拟机”。
3.选中“自定义(高级)”,然后点击“下一步”。
4 . 再点击“下一步”,出现如下界面。
编译Linux内核
编译Linux内核实验目的学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。
实验内容重新编译内核是一件比你想像的还要简单的事情,它甚至不需要你对内核有任何的了解,只要你具备一些基本的Linux操作系统的知识就可以进行。
本次实验,要求你在RedHat Fedora Core 5的Linux系统里,下载并重新编译其内核源代码(版本号KERNEL-2.6.15-1.2054);然后,配置GNU的启动引导工具grub,成功运行你刚刚编译成功的Linux内核。
实验提示Linux是当今流行的操作系统之一。
由于其源码的开放性,现代操作系统设计的思想和技术能够不断运用于它的新版本中。
因此,读懂并修改Linux内核源代码无疑是学习操作系统设计技术的有效方法。
本实验首先介绍Linux内核的特点、源码结构和重新编译内核的方法,讲述如何通过Linux系统所提供的/proc虚拟文件系统了解操作系统运行状况的方法。
最后,对Linux编程环境中的常用工具也有简单介绍。
1.1查找并且下载一份内核源代码我们知道,Linux受GNU通用公共许可证(GPL)保护,其内核源代码是完全开放的。
现在很多Linux的网站都提供内核代码的下载。
推荐你使用Linux的官方网站: ,如图1-1。
在这里你可以找到所有的内核版本。
图1-1 Linux的官方网站由于作者安装的Fedora Core 5并不附带内核源代码,第一步首先想办法获取合适版本的Linux内核代码。
通过命令# uname –r2.6.15-1.2054_FC5这就是说,RedHat Fedora Core 5采用的内核版本是2.6.15-1.2054_FC5。
但是,官方网站/pub/linux/kernel/找不到对应版本。
请别着急,既然它是RedHat发布的,RedHat的官方网站总有吧。
浏览/pub/fedora/linux/core/5/source/SRPMS,我们发现果然有文件kernel-2.6.15-1.2054_FC5.src.rpm,这个rpm文件就是2.6.15-1.2054_FC5版的内核源代码了。
ubuntu12.04 64bit 常见问题
ubuntu12.04 64bit 常见问题2013-01-30 14:14 93人阅读评论(0) 收藏举报////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////访问其他samba服务器////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////首先需要安装samba# apt-get install samba1. 一种直接使用smbclient命令# smbclient //服务器地址/目录-U 用户名%密码如# smbclient //192.168.0.133/liyong -U liyong%liyong2. 使用mount#apt-get install smbfs#smbmount //192.168.0.133liyong /mnt/133 -o user=liyong,pass=liyong,iocharset=utf8////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////安装飞信////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////sudo apt-get install openfetionsudo apt-get install pidgin-openfetion////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////android编译环境搭建////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////l 依赖环境:$ sudo apt-get install git-core gnupg flex bison gperf build-essential \zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos \python-markdown libxml2-utils xsltproc zlib1g-dev:i386安装过程中,我出现了错误1。
ubuntu内核编译、安装
ubuntu内核编译、安装简要步骤:⼀、下载源码,解压⼆、复制当前系统的配置⽂件到源码⽬录下的.config⽂件三、编译源码四、编译模块五、安装模块六、添加启动项⼀、下载源码,解压 ⽅式1、 查看当前系统内核版本:打开终端输⼊uname -r ⽅式2、apt下载 打开终端输⼊: sudo apt-get source linux-image-$(uname -r) 下载存放⽬录: /usr/src/ 下载完成后,解压⽂件:如 tar -xavf linux-5.0.3.tar.xz⼆、复制当前系统的配置⽂件到源码⽬录下的.config⽂件 因编译后的内核是给本机使⽤,需要适配本机,所以,复制当前系统的配置信息到源码⽬录的 .config⽂件内 cp /boot/config-5.0.3 -generic ./.config.三、编译源码 备份启动⽂件 cp boot/grub/grub.cfg boot/grub/grub.cfg.back 安装编译环境软件 sudo apt-get install libncurses5-dev openssl libssl- dev sudo apt-get install build-essential openssl sudo apt-get install pkg-config sudo apt-get install libc6-dev sudo apt-get install bison sudo apt-get install flex sudo apt-get install libelf-dev sudo apt-get install zlibc minizip sudo apt-get install libidn11-dev libidn11 sudo apt-get install libssl-dev 进⼊源码⽬录,打开终端输⼊: make menuconfig ⾸次编译,图形选择界⾯通过左右⽅向键选择 load(读取刚才复制更新的配置⽂件)>>> OK >>> Save >>> OK >>> EXIT >>> EXIT 编译: make mrproper make clean make bzImage -j8四、编译模块 make modules -j8五、安装模块 make install make modules_install 此操作此后/lib/modules/⽬录下应该新⽣成⼀个新内核版本号⽂件六、添加启动项 将3个⽂件复制到boot⽬录下 mkinitramfs /lib/modules/5.0.3 -o /boot/initrd.img-5.0.3-generic cp /usr/src/linux-5.0.3/arch/x86/boot/bzImage /boot/vmlinuz- 5.0.3-generic cp /usr/src/linux-5.0.3/System.map /boot/System.map-5.0.3 进⼊/boot/grub/然后执⾏ update-grub2七、重启 shutdown -r now uname -a。
linux内核编译过程解释
linux内核编译过程解释
Linux内核是操作系统的核心部分,它控制着系统的资源管理、任务调度、驱动程序等重要功能。
编译Linux内核是一项非常重要的任务,因为它决定了系统的性能、稳定性和可靠性。
下面我们来了解一下Linux内核的编译过程。
1. 下载内核源代码:首先,我们需要从官方网站上下载Linux
内核的源代码。
这里我们可以选择下载最新的稳定版本或者是开发版,具体取决于我们的需求。
2. 配置内核选项:下载完源代码后,我们需要对内核进行配置。
这一步通常需要使用make menuconfig命令来完成。
在配置过程中,我们需要选择系统所需的各种驱动程序和功能选项,以及定制化内核参数等。
3. 编译内核:配置完成后,我们可以使用make命令开始编译内核。
编译过程中会生成一些中间文件和可执行文件,同时也会编译各种驱动程序和功能选项。
4. 安装内核:编译完成后,我们可以使用make install命令将内核安装到系统中。
这一步通常需要将内核文件复制到/boot目录下,并更新系统的引导程序以便正确加载新内核。
5. 重启系统:安装完成后,我们需要重启系统以使新内核生效。
如果新内核配置正确,系统应该能顺利地启动并正常工作。
总的来说,Linux内核的编译过程是一个相对复杂的过程,需要一定的技术和操作经验。
但是,通过了解和掌握相关的编译技巧和命
令,我们可以轻松地完成内核编译工作,并为系统的性能和稳定性做出贡献。
osg和osgearth编译
Ubuntu12.04下osg,osgearth编译全步骤1.安装文件夹拷贝到/home目录下2.su -命令切换到root,然后检测Linux环境是否是Linux64位3.检测ffmpeg是否存在,若存在则移除ffmpeg4.检测QT是否存在,若存在则移除QT删除QT5.更新源和直接用命令安装其他依赖的软件更新源:apt-get update -yapt-get upgrade -y安装依赖软件:apt-get install gcc –yapt-get install g++ -yapt-get install yasm –yapt-get install cmake –yapt-get install cmake-gui –yapt-get install curses-gui –yapt-get install cmake-curses-gui –y apt-get build-dep openscenegraph –yapt-get install libboost1.48-all-dev –y apt-get install gtk-2.0 –yapt-get install libgtkglext1-dev –y6.修复boost头文件位置cp –r /usr/include/boost /usr/local/include/7.安装QT进入qt安装包所在目录,开始安装配置环境变量:(1)gedit /etc/profile 打开配置文件,在末尾中添加:OSG_FILE_PATH=/home/GeoVisEnvironmentUbuntu/osg/OpenSceneGraph-Data-3.0.0 QTDIR=/opt/Qt5.4.0/5.4/gcc_64PATH=/opt/Qt5.4.0/Tools/QtCreator/bin:$QTDIR/bin:$PATHexport OSG_FILE_PATHexport QTDIRexport PATH(2)gedit /etc/ld.so.conf.d/libc.conf,在末尾添加:/opt/Qt5.4.0/5.4/gcc_64/lib(3)gedit ~/.bashrc,在末尾同(1)相同的加入:OSG_FILE_PATH=/home/GeoVisEnvironmentUbuntu/osg/OpenSceneGraph-Data-3.0.0 QTDIR=/opt/Qt5.4.0/5.4/gcc_64PATH=/opt/Qt5.4.0/Tools/QtCreator/bin:$QTDIR/bin:$PATHexport OSG_FILE_PATHexport QTDIRexport PATH8.安装ffmpeg进入ffmpeg所在文件夹,tar -xjf ffmpeg-2.5.tar.bz2cd ffmpeg-2.5./configure --enable-shared --enable-picmake -j 4make install9.安装和更新gdal删除之前的gdal库find / -name libgdal.so*解压gdal安装包,进入文件夹,执行./configure执行make –j 8,之后执行make install修正库路径cp ./.libs/libgdal.so* /usr/lib10.将动态链接库加载到内存,即配置路径,然后刷新,将其真正加载到内存并可用执行touch /etc/ld.so.conf.d/libc.confecho "/usr/local/lib64" >> /etc/ld.so.conf.d/libc.confecho "/usr/local/lib" >> /etc/ld.so.conf.d/libc.confldconfig -vsource /etc/profileapt-get autoremove10.编译osg源码编译debug版进入OpenSceneGraph-3.3.1源码所在目录,执行cmake . -DCMAKE_BUILD_TYPE=Debug这一步会报cmake版本过低的错误。
ubuntu 10.04 编译安装最新版本linux-2.6.34内核
build-essential (基本的编程库(gcc, make等)
kernel-package (Debian 系统里生成 kernel-image 的一些配置文件和工具)
libncurses5-dev (meke menuconfig要调用的)
libqt3-headers (make xconfig要调用的)
第五步:更新配置GRUB引导列表
sudo gedit /boot/grub/grub.cfg
我的grub.cfg添加如下:
menuentry ‘Ubuntu 10.04,Linux 2.6.34′ –class ubuntu –class gnu-linux –class gnu –class os {
initrd /initrd.img-2.6.34
}
#以下是原2.6.32内核启动项
menuentry ‘Ubuntu,Linux 2.6.32-22-generic’ –class ubuntu –class gnu-linux –class gnu –class mod ext2
set root=’(hd1,9)’
search –no-floppy –fs-uuid –set 501d3a42-1d52-4438-99bf-e679da605867
linux /vmlinuz-2.6.32-22-generic root=UUID=33883099-83a5-49f3-9c12-ee6a4d90da9e ro quiet splash
######################################
完成上述操作后,重启系统,选新内核启动,会弹出一个小英文窗口,先选择grub update grub …….(因为无法截图,记不清了,大概有这些字样)这一项来更新GRUB,然后再选最上面的一项,好象是resum字样的,不知道有没有记错,哈哈,请细心点吧。完成后重新启动电脑,GRUB菜单会更新成有好多启动项了,就象刚安装完UB10.04时一样,不过你可以登录系统后再修改/boot/grub/grub.cfg来简洁它。到此编译安装工作圆满成功,谢谢各位看官的支持!!!
linux内核裁剪及编译步骤
linux内核裁剪及编译步骤Linux内核裁剪及编译步骤Linux操作系统的内核是其最重要和核心的组成部分。
用户可以根据自己的需要对内核进行裁剪以减少内核代码的大小,以及支持特定的硬件和功能。
Linux内核的裁剪和编译步骤相对来说比较复杂,需要一定的技术和安装环境的支持。
下面将介绍Linux内核裁剪及编译的具体步骤,以供参考。
一、准备工作在开始进行Linux内核的裁剪及编译之前,需要进行一些准备工作。
首先,需要安装Linux操作系统的开发环境。
其次,需要下载Linux内核的源代码,可以从Linux 的官方网站或者其他开源社区下载。
二、配置内核选项安装好开发环境和下载好源代码之后,就可以开始进行内核的裁剪和编译了。
首先需要进行内核选项的配置。
可以使用make menuconfig命令进入配置界面。
在这个界面中,用户可以对内核进行不同程度的裁剪,包括去掉多余的硬件支持和功能选项。
在配置选项中,用户需要选择一些基本的配置选项,包括文件系统类型、设备驱动、协议栈、安全选项、虚拟化等。
用户可以根据自己的需要,进行选项的选择和配置。
三、编译内核在完成了内核的配置之后,下一步就是进行内核的编译。
可以使用make命令进行编译。
编译过程中需要耗费一定的时间和资源,因此建议在空闲时刻进行编译。
如果出现编译错误,需要根据错误提示进行排查和解决。
编译错误很可能是由配置选项不当造成的,因此要仔细检查配置选项。
四、安装内核编译完成后,就可以安装内核。
可以使用make install命令进行安装。
安装完成后,可以重启系统,以使新的内核生效。
在重启时,需要手动选择新的内核,可以选择自己编译的内核或者系统默认的内核。
五、总结对于不同的用户,对内核的需求和选择是不同的。
因此,在对内核进行裁剪时,需要根据自己的需求进行适当的选择,以提高系统性能和稳定性。
同时,在进行内核的编译时,也需要仔细检查配置选项和随时记录日志以便排除可能出现的问题。
不到十五秒在ubuntu12.04下安装ns2.35
以下全部都是闹眼子在ubuntu12.04中,是这样安装ns2的有图有真相,不到十五秒就安装好ns2.35了1、首先是下载ns-allinone-2.35.tar.gz。
官网下载/projects/nsnam/files/latest/download?source=files2、先更新一下系统。
在终端输入:sudo apt-get update #更新源列表sudo apt-get upgrade #更新已安装的包sudo apt-get dist-upgrade #更新软件,升级系统3、安装几个需要使用的软件包sudo apt-get install build-essentialsudo apt-get install tcl8.5 tcl8.5-dev tk8.5 tk8.5-dev #for tcl and tksudo apt-get install libxmu-dev libxmu-headers #for nam4、然后可以进行安装:将下载好的ns-allinone-2.35放在根目录下右键解压至此处得到同名文件夹在终端中输入cd ./ns-allinone-2.35sudo ./install然后看到命令行非常养眼地快速翻滚。
等待数分钟可以看到提示:5、设置环境变量和善后工作:用cd进入目录/home/li(li是我的用户名),然后sudo gedit .bashrc在文件末尾加入:PATH="$PATH:/home/li/ns-allinone-2.35/bin:/home/li/ns-allinone-2.35/tcl8.5.10/unix:/home/li/ns-allinone-2.35/tk8.5.10/unix" [此步骤在12.04中无需]LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/li/ns-allinone-2.35/otcl-1.14:/home/li/ns-allinone-2.35/lib"TCL_LIBRARY="$TCL_LIBRARY:/home/li/ns-allinone-2.35/tcl8.5.10/library"保存退出(上述内容在安装结束后的提示中有,见粗体部分)。
嵌入式实验一:LED灯点亮
嵌⼊式实验⼀:LED灯点亮实验⼀:LED灯程序⼀、实验环境开发机环境操作系统:ubuntu 12.04交叉编译环境:arm-linux-gcc 4.3.26410板⼦内核源码:linux-3.0.1⽬标板环境:OK6410-A linux-3.0.1⼆、实验原理image.png图1-OK6410LED原理图image.png图2-LED原理图从上⾯的原理图可以得知,LED与CPU引脚的连接⽅法如下,低电平点亮。
LED1 -GPM0LED2 -GPM1LED3 -GPM2LED4 -GPM3image.png通过上⾯可以得知,需要先将GPM0设置为输出⽅式。
将相应的寄存器进⾏配置。
然后将GPMDAT寄存器的第0位置0灯亮,置1灯灭。
三、实验代码1.编写驱动程序#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <asm/uaccess.h> /* copy_to_user,copy_from_user */#include <linux/miscdevice.h>#include <linux/pci.h>#include <mach/map.h>#include <mach/regs-gpio.h>#include <mach/gpio-bank-m.h>#include <plat/gpio-cfg.h>#define LED_MAJOR 240int led_open(struct inode *inode, struct file *filp){unsigned tmp;tmp = readl(S3C64XX_GPMCON);tmp = (tmp & ~(0x7U << 1)) | (0x1U);writel(tmp, S3C64XX_GPMCON);printk("#########open######\n");return 0;}ssize_t led_read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos){printk("#########read######\n");return count;}ssize_t led_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos) {char wbuf[10];unsigned tmp;printk("#########write######\n");copy_from_user(wbuf, buf, count);switch (wbuf[0]){case 0: //offtmp = readl(S3C64XX_GPMDAT);tmp |= (0xfU);writel(tmp, S3C64XX_GPMDAT);break;case 1: //ontmp = readl(S3C64XX_GPMDAT);tmp &= ~(0xfU);writel(tmp, S3C64XX_GPMDAT);break;default:break;}return count;}int led_release(struct inode *inode, struct file *filp){printk("#########release######\n");return 0;}struct file_operations led_fops = {.owner = THIS_MODULE,.open = led_open,.read = led_read,.write = led_write,.release = led_release,};int __init led_init(void){int rc;printk("Test led dev\n");rc = register_chrdev(LED_MAJOR, "led", &led_fops);if (rc < 0){printk("register %s char dev error\n", "led");return -1;}printk("ok!\n");return 0;}void __exit led_exit(void){unregister_chrdev(LED_MAJOR, "led");printk("module exit\n");return;}module_init(led_init);module_exit(led_exit);2.编写Makefile⽂件ifneq ($(KERNELRELEASE),)obj-m := driver_led.oelseKDIR := /work/linux-3.0.1all:make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-clean:rm -f *.ko *.o *.mod.o *.mod.c *.symversendif3.编写测试⽂件#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int main (void){int fd;char buf[10]={0,1,0,1};fd = open("/dev/my_led",O_RDWR);if (fd < 0){printf ("Open /dev/my_led file error\n");return -1;}while(1){write(fd,&buf[0],1);sleep(1);write(fd,&buf[1],1);sleep(1);}close (fd);return 0;}四、实验步骤1、编译驱动程序和测试程序在终端中运⾏:#make命令,编译成功⽣⽣下列⽂件在终端中运⾏:#arm-linux-gcc test.c -o test,编译成功⽣成⽂件2、将⽂件拷贝到SD卡3、将SD卡插⼊到OK6410开发板中4、在OK6410终端中运⾏程序加载驱动:#insmod sdcard/driver_led.ko创建设备⽂件:# mknod /dev/my_led c 240 0运⾏测试⽂件:#./sdcard/test卸载驱动程序:#rmmod sdcard/driver_led.ko5、运⾏结果此时可以看到OK6410开发板的4个LED灯⼀直同时点亮,然后熄灭。
QEMU模拟Cortex-A9运行U-boot和LinuxV0.2.0
QEMU模拟Cortex-A9运行U-boot和LinuxQEMU模拟Cortex-A9运行U-boot和Linux ......................................... 错误!未定义书签。
1. 实验目的 (2)2. 实验要求 (2)3. 实验原理 (2)4. 实验步骤 (3)4.1 VMware虚拟机中安装Ubuntu (3)4.2 安装QEMU模拟器 (4)4.3 编译并运行U-boot (4)4.4 编译并运行Linux (6)4.5 在目标机(Linux系统)中运行应用程序 (10)思考题 (12)1. 实验目的1) 熟练使用Linux操作系统;2) 认识一种新的核模拟器QEMU;3) 掌握嵌入式Linux系统的开发流程;2. 实验要求1)在PC机上安装VMware虚拟机,并在VMware中安装Linux操作系统(Ubuntu 12.04);2) 在Ubuntu中安装QEMU;3)编译U-boot,并在QEMU上运行;4)编译Linux核,并使用Busybox制作根文件系统;5)在QEMU上运行Linux操作系统;6)在该Linux系统上运行应用程序。
3. 实验原理1)VMware Workstation虚拟机是可以在Windows/Linux系统上运行的应用程序,它可以模拟基于x86的标准PC环境。
这个环境和真实的计算机一样,都有芯片组、CPU、存、显卡、声卡、网卡、软驱、硬盘、光驱、串口、并口、USB控制器、SCSI控制器等设备。
与“多启动”系统相比,VMWare采用了完全不同的概念,多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。
而VMWare虚拟机软件是一个“虚拟PC”软件,它可以使你在一台机器上同时运行多个Windows、DOS、LINUX系统,并且在系统切换时不需要重启计算机。
在使用上,这台虚拟机和真正的物理主机几乎没有区别,都需要分区、格式化、安装操作系统、安装应用程序和软件,总之,一切操作都跟一台真正的计算机一样。
ubuntu12.04安装及配置过程详解
deb-src /ubuntu/ precise-security main multiverse restricted universe
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
修改源:
sudo gedit /etc/apt/sources.list
加入下列合适的源列表:
# t 清华大学更新服务器
deb /ubuntu/ precise main multiverse restricted universe
1.下载 EasyBCD 编辑引导工具
2.右击“计算机”图标选择“管理”
单击“磁盘管理”
来给 ubuntu 划分磁盘空间。选择空闲空间大分区,压缩一个 40G
大小的空间用于安装 ubuntu,再压缩一个 5G 大小空间用于临时
存放 ubuntu 镜像;然后删除这两个压缩卷,并将 5G 格式化为
FAT32 文件格式、40G 可以不格式化 示例:
kernel (hd0,6)/vmlinuz boot=casper isoscan/filename=/ubuntu-12.04-desktop-i386.iso ro quiet splash locale=zh_CN.UTF-8 initrd (hd0,6)/initrd.lz (注意:上图代码中“ubuntu-12.04-desktop-i386.iso”为你下载 的 ubuntu 12.04 系统镜像文件名,这个文件名是可以修改的,但 修改的名字一定要与写入的代码名字一致,否则将无法引导安装; (hd0,5) 表示磁盘分区,hd(0,0), hd(0,1), hd(0,2), hd(0,3)表示 主分区,(hd0,4)以后的表示逻辑分区,现在我有三个主分区 C、D、E 盘,则(hd0,0)表示 C 盘,(hd0,1)表示 D 盘,(hd0,2)表示 E 盘,(hd0,6)表示 G 盘,我的镜像就是放在G盘里,请把(hd0,6) 改成自己对应的分区);关闭保存退出程序。
my frist driver HELLO
My first driver:hello world主机环境:Ubuntu12.04目标机:飞凌-OK6410-A 内核3.0.1编译环境:arm-linux-gcc-4.3.2一、准备内核源码(linux-3.0.1-2012-09-23.tar.gz)采用3.0.1内核源码(必须与ok6410的内核版本一致),将其拷贝到root/sky/目录下,并解压(tar xvzf linux-3.0.1-2012-09-23.tar.gz)到当前目录下。
二、准备内核代码简单的一段代码如下:hello.c#include <linux/module.h> //所有模块都需要的头文件#include <linux/init.h> //包括__init ,__exit ,module_init(),module_exit()函数#include<linux/kernel.h> //包含printk 函数MODULE_LICENSE("GPL"); //模块的许可证声明必须有MODULE_AUTHOR("QuLei"); //作者MODULE_DESCRIPTION("Hello World Module"); //描述MODULE_ALIAS("a simplest module");//别名static int __init hello_init(void) //模块初始化函数//static 函数仅在当前文件有效,__init 该函数代码在初始化完毕后被忽略{printk(KERN_EMERG"This is my first driver. \n"); //打印一条信息// KERN_EMERG 打印级别return 0;}static void __exit hello_exit(void) //模块退出清除函数//__exit 仅在卸载模块时被调用{printk(KERN_EMERG "Goodbye,My world \n"); //打印一条信息}module_init(hello_init); //设置模块初始化函数module_exit(hello_exit); //设置模块退出清除函数三、编译驱动程序到内核(两种方法)方法一:将驱动文件放入内核目录树1.将hello.c复制到内核源码drivers/char/目录下(cp hello.c /root/sky/linux-3.0.1/drivers/char/)2.在内核中添加对“Hello World”驱动程序的支持,即修改同目录下的Kconfig文件,添加如下代码:config My_HELLOtristate "My First Dricer Hello"depends on ARCH_S3C64XXhelpMy Self Driver Hello for S3C64XX3.修改同目录下的Makefile文件,使hello.c能够编译,添加如下代码:obj-$(CONFIG_My_HELLO) += hello.o4.配置内核,添加该驱动程序的支持。
项目日志
宿主机开发环境:ubuntu 12.04目标机:飞凌6410(arm11)12月5日* 环境搭建设置交叉编译器1.设置整个项目在/opt目录下进行,修改权限sudo chown jun /optsudo chgrp jun /opt2.使用厂商提供的交叉编译器:arm-linux-gcc-4.3.2.tgzcd /opttar xvzf arm-linux-gcc-4.3.2.tgz3.修改环境变量sudo vi /etc/environment添加/opt/usr/local/arm/4.3.2/bin:之后为:PATH="/opt/usr/local/arm/4.3.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin: sbin:/bin:/usr/games"保存退出,使之生效. /etc/environment4.检查交叉编译器arm-linux-gcc -v* 配置编译 uboot1.使用厂商提供的uboot:uboot1.1.6-V5.50-2014-09-19.tar.gz2.解压:tar xvzf uboot1.1.6-V5.50-2014-09-19.tar.gzcd uboot1.1.6/3.配置:make forlinx_nand_ram256_config4.编译:make cleanmake5.烧写uboot.bin到开发板*编译内核1.使用厂商提供的内核:FORLINX_linux-2.6.36.2.tar.gz2.解压:tar xvzf FORLINX_linux-2.6.36.2.tar.gz3.编译:make zImage4.拷贝zImage到/tftpboot/目录cp arch/arm/boot/zImage /tftpboot/* 根文件系统制作(使用busybox开源软件)1.下载busybox源码包:busybox-1.21.1.tar.bz22.解压:tar -xvjf busybox-1.21.1.tar.bz23.配置源码:cd busybox-1.21.1/make menuconfig重新定制模块操作命令Linux Module Utilities --->[ ] Simplified modutils (NEW) //去掉[*] insmod //添加[*] rmmod //添加[*] lsmod //添加[*] modprobe //添加[*] Blacklist support//添加[*] depmod //添加取出闪存flash操作命令Miscellaneous Utilities --->[*] nandwrite (NEW) //去掉[*] nanddump (NEW) //去掉保存退出4.修改Makefilevim Makefile +164164 将CROSS_COMPILE ?= 修改为CROSS_COMPILE=arm-linux- 190 将ARCH ?= $(SUBARCH)修改为ARCH=arm5.编译和安装make && make install默认安装在当前目录的_install目录用file命令检查编译结果:file _install/bin/busyboxELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped确保是ARM平台的5.手动在_install创建目录cd _install/ && mkdir dev lib etc/init.d proc sys home mnt var tmp root -p6.添加系统启动配置文件vim etc/inittab//添加如下内容::sysinit:/etc/init.d/rcS::respawn:-/bin/sh::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount -a -r保存退出7.添加文件系统配置文件vim etc/fstab//添加如下内容proc /proc proc defaults 0 0tmpfs /tmp tmpfs defaults 0 0sysfs /sys sysfs defaults 0 0tmpfs /dev tmpfs defaults 0 0保存退出8.添加系统启动服务配置脚本vim etc/init.d/rcS/bin/mount -amkdir /dev/ptsmount -t devpts devpts /dev/ptsecho /sbin/mdev > /proc/sys/kernel/hotplugmdev -s保存退出修改rcS文件权限chmod 777 etc/init.d/rcS9.添加 busybox运行时所需动态库和链接库查看busybox可执行程序所需的动态库arm-linux-readelf -a bin/busybox | grep "Shared"0x00000001 (NEEDED) Shared library: [libm.so.6]0x00000001 (NEEDED) Shared library: [libc.so.6]可知需要动态库为:libc和libm两个动态库当然还要有链接库拷贝所需动态库到根文件系统lib目录下//拷贝标准C库find /opt/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc \( -name "libc-*" -o -name "libc.so*" \) -exec cp -frd {} lib/ \;//拷贝数学运算库find /opt/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc \( -name "libm-*" -o -name "libm.so*" \) -exec cp -frd {} lib/ \;//拷贝动态链接库find /opt/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc \( -name "ld-*" \) -exec cp -frd {} lib/ \;注:在拷贝前将/opt/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc目录下的thumb2目录删除,因为这个目录的库会与在arm模式下需要的库重名,即与armvt目录的有些库重名,这会导致在拷贝时有可能将有用的覆盖掉没用的留下了,最终导致网络文件系统挂载失败。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在ubuntu12.04下编译linux内核写这个东西的时候,想起07年第一次编译内核,想起06年开始看内核代码,想起那段,生命中最灰暗的日子。
那时,经常在校内写读内核的心得,只因发现,你目录前言 (2)一、编译前的准备工作 (2)二、内核的配置 (2)三、内核的生成和安装 (3)四、启动新内核 (4)五、修改默认的配置文件 (4)5.1修改默认配置添加软件功能 (4)5.2修改默认配置添加pci和usb设备驱动 (5)5.3修改默认配置添加杂类设备驱动 (7)前言编译内核和编译其它软件相比,除了配置之外,没有什么特别的地方。
既然编译内核这么简单,网上也能找到很多介绍的文章,我为什么还要写呢?因为看到有些文章源自不断抄袭旧东西,导致抄了些没用的东西,而且基本都对内核配置避而不谈,这样实际上一定会有人遇到问题。
所以,写点吧,给初学者。
一、编译前的准备工作编译软件需要先安装编译环境,主要的就是工具链(toolchain)。
由于安装包需要下载的数据量较大,所以如果软件源建议还是换成国内的吧。
我用163的源,source.list文件在这里,覆盖/etc/apt/source.list就行了。
替换源后,执行如下命令:apt-get updateapt-get install build-essential p7zip-full后面的7z工具供下载了xz后缀文件的同学使用。
下载内核源码的网站是,版本随意,源码包名字是linux-3.x.x.tar.gz,有很多版本提供.xz结尾的压缩版本,压缩比较高,看自己网络情况定吧。
我这里下载的版本是3.6.6,名为linux-3.6.6.tar.gz。
接着解压源码,假设我们的编译目录为/home/sb/,解压命令为:tar xf linux-3.6.6.tar.gz-C/home/sb这样/home/sb/下出现一个linux-3.6.6的目录。
二、内核的配置内核支持很多的设备和功能,这些设备驱动和功能的开关主要通过内核的配置文件确定。
编译时,内核使用的配置文件是内核源码树根目录下一个名为.config的隐藏文件。
x86电脑默认内核配置文件可直接使用arch/x86/config/i386_defconfig,如下命令:cp arch/x86/config/i386_defconfig.configmake menuconfig默认的配置文件对于启动系统足够了,但是不同的机器硬件配置不同,默认的配置可能不支持你机器的部分硬件,火鹤缺少一些你需要的功能。
所以实际上,你会需要修改默认配置文件,重新编译来达到你的需求,关于配置文件修改见后续“修改默认的配置文件”一章。
make menuconfig后有个蓝白界面弹出来,就是内核的配置界面,如下:三、内核的生成和安装配置完成之后,用左右键和回车退出配置界,按照提示保存操作即可。
编译之前,说下编译的时间长度。
现在默认内核配置文件的模块非常少,少到几乎没有,所以编译时间较短。
如果用ubuntu的配置文件(/boot/下config开头的就是),由于需要支持的模块非常多,编译时间的确很长,这时建议减少模块的编译数量。
由于自己编译的内核一般使用场景确定,可以减少文件系统的支持数量和设备驱动中明显不需要的。
比如你电脑就一个以太网卡,其余的网卡的驱动都不要选。
类似的方式去掉你认为不用的文件系统。
当然,减少模块的编译需要修改内核配置文件。
编译就一条命令:make-j nn是个数字,默认是1。
编译的机子如果是双核建议make-j3,4核make-j7。
如果是8和以上,make-j10吧,据说比较合适的数值是cpu的核数乘以2加1,这个我自己实验过,发现没有那么玄乎,基本8核用10个进程就行了。
编译一般20分钟内能完成。
于是,内核有了,模块也有了(如果有的话)。
内核源码树根目录下生成vmlinux文件,这个是未压缩的内核,压缩的内核是arch/x86/boot/bzImage,一般启动都用压缩的内核,因为加载时间少。
接着安装编译的内核,命令如下:make modules_install这个命令安装所有模块(*.ko)到/lib/modules/的对应内核版本下。
然后,启用新内核,命令为:make install这个命令拷贝(压缩的)内核到/boot目录,并改名为vmlinuz-版本号。
然后生成initrd.img-版本号。
最后在grub.cfg中添加使用新内核grub项(实际是两项)。
对grub有了解的,可以手动修改grub.cfg,其实不麻烦,也是必须掌握的。
四、启动新内核一切就绪,重启后在grub选择界面的时候选择新条目启动,启动后新内核在我的电脑上出现了几个问题;一、启动的时候报了一个devtmpfs的错误,导致/dev下的设备节点无法创建解决方法:重新编译把CONFIG_DEVTMPFS和CONFIG_DEVTMPFS_MOUNT选上二、NTFS文件系统不识别解决方法:重新编译把NTFS的支持选上三、无线网卡不可用解决方法:重新编译,把我机子对应的无线网卡驱动选上。
可见,默认配置还是或多或少会遇到些问题的,但除非文件系统不识别,否则启动应该没有问题。
下面介绍配置文件的修改。
五、修改默认的配置文件从上面我遇到的三个问题看,默认配置文件是不能满足所有需求,需要手动修改。
由于默认的配置文件的模块非常非常少,这里只需要关心添加什么就够了。
常见情况下,修改配置主要是增加设备的支持和某些软件功能得支持,下面都做介绍。
顺便提一下,内核中的配置选项都是大写的。
5.1修改默认配置添加软件功能软件功能的支持添加相对比较简单,只要知道那个功能,比如上面说的NTFS文件系统的支持对应的配置选项名,选上即可。
一般初学者按照最常规的步骤来,先make menuconfig,然后搜索配置选项的关键字。
make menuconfig的界面出来后,打’/’(斜杠)后出现一个输入框。
输入NTFS,出现如下对话框:有时匹配的项超过一页,就需要上下翻,看哪个名字比较像,这里明显是NTFS_FS这个选项,现在默认是n,表示没有编译。
这时按空格选择编译进内核或者编译成模块,为'*'表示编入内核,'M'表示模块,建议变成*吧,反正也不大。
选上后一步步退出保存,然后编译即可。
5.2修改默认配置添加pci和usb设备驱动本来,pci和usb的设备驱动分开描述,因为很不一样。
但是考虑到大部分人(包括我)都无法准确区分一个设备到底是pci设备还是usb设备,所以就放在一起。
下面就假设用默认配置启动后,有设备不工作,因为驱动没有编译。
两种情况,一种是ubuntu内核可以工作,一种是本来就不能工作。
用ubuntu的内核都不工作的,因为设备驱动没有编译的概率不大,因为ubuntu的驱动支持还是比较全面的。
万一遇到了,要么搜索,要么用设备id号去源码查找,或者上厂家的网站下载linux驱动。
如果ubuntu的内核支持,而用默认配置文件编出的内核不支持,就基本是驱动没有编译的问题了。
要添加设备驱动,首先得知道你的硬件设备的基本信息。
用lspci和lsusb这两条命令就够了。
比如现在我的有线网卡不工作,ubuntu行的(有线网卡一般是pcie设备,3G、无线网卡一般是usb设备。
如果lspci没看到网卡,那么就lsusb去找。
这个多少需要懂点英文单词。
),那么就到ubuntu下输入:lspci-k-k表示显示出内核使用的驱动名。
lspci-k后找Eehernet这个单词,看到如下:04:00.0Ethernet controller:Marvell Technology Group Ltd.88E8039PCI-E Fast Ethernet Controller(rev14)Subsystem:QUANTA Computer Inc Device0761Kernel driver in use:sky2最后一行是kernel driver in use:sky2,说明内核中这个网卡驱动的名字叫做sky2。
那默认内核配置文件是否包含了这个sky2的驱动呢?cat.config|grep SKY输出为:CONFIG_SKY2=y#CONFIG_SKY2_DEBUG is not set可见,默认内核中有这个驱动,而且是编译进内核。
假如没有,会显示:#CONFIG_SKY2is not set我们假设默认没有编译,那么在make menuconfig后打一个’/’,然后输入SKY,回车,出现如下对话框:看到第6行有个Location,提示了如何找到CONFIG_SKY2选项。
先进入Device Drivers,然后Network device support,如此一层层下去。
最后找到对应的名称是Prompt:Marvell Yukon2support的那项,选择编译到内核,保存并编译即可。
无线网卡的驱动不支持概率挺大,而且无线驱动的名字找起来麻烦一些,我认为标准做法是先执行lsusb命令:看到如下一行:Bus001Device002:ID148f:2573Ralink Technology,Corp.RT2501/RT2573 Wireless Adapter是的,我的网卡是Ralink牌子的。
中间有个148f:2573是设备的厂商号和设备号,可作为设备的类别标志。
查找内核中ubuntu内核中这款无线网卡的支持驱动名:cat/lib/modules/3.2.0-23-generic-pae/bmap|grep2573|grep148f输出为:rt73usb0x00030x148f0x25730x0000(后面省略)输出说明支持这个无线网卡的驱动叫做rt73usb,有时会出现一个设备有多个驱动支持的情况,此时可以搜索下或随便选一个。
这个驱动默认配置没有支持,按照上面说的make menuconfig找配置的方法找到位置,编入内核。
5.3修改默认配置添加杂类设备驱动除了pci和usb设备之外,一定会有人遇到其它小设备不能用的情况,或者有些usb 接口的设备但是不在lsusb中出现的。
比如鼠标,usb转串口线等。
这里以鼠标为例介绍找杂七杂八设备驱动的方法,实际就是看ubuntu下的内核打印,猜测驱动的名字。
要是3年前,如果鼠标如果不支持,说起来还挺复杂的,但现在的默认配置比较好,USB控制器的驱动都编译到内核了,所以就容易处理了。
还是那句话,ubuntu下应该支持吧,不支持就悬了。
ubuntu下如果行,但是你自己编译的内核不行,看下ubuntu调用了哪个内核驱动。
为了使信息更清晰,先清空dmesg的内容,命令为:dmesg-c然后插入鼠标,查看打印:dmesg看后面的打印是什么,现在手头只有无线的鼠标,看到的打印如下:[4081.871505]usbhid6-1:1.0:looking for a minor,starting at96[4081.871635]hid-generic0003:09DA:054F.0007:input,hiddev0,hidraw0:USB HID v1.11Keyboard[A4TECH USB Device]on usb-0000:00:1d.1-1/input0 [4081.871997]usb6-1:adding6-1:1.1(config#1,interface1)[4081.872731]usbhid6-1:1.1:usb_probe_interface[4081.872739]usbhid6-1:1.1:usb_probe_interface-got id[4081.875412]input:A4TECH USB Device as/devices/pci0000:00/0000:00:1d.1/usb6/6-1/6-1:1.1/input/input14[4081.875610]hid-generic0003:09DA:054F.0008:input,hidraw1:USB HID v1.11 Mouse[A4TECH USB Device]on usb-0000:00:1d.1-1/input1[4081.875691]hub6-0:1.0:state7ports2chg0000evt0002看到有A4TECH吧,这个的就是鼠标的牌子,双飞燕。