关于Linux操作系统的一些问题?
首先,执行文件需要给出文件的路径,系统根据路径找到文件后才能执行。
如果执行上述第一条命令,结果是:-bash:hack:command not found。为什么呢?
这与$PATH环境变量有关,当你没有提供完整的路径时,在这个变量里有默认的几个路径供系统搜索,而你所执行的文件又不在这几个默认的路径内,所以显示找不到。你也许会说,把这个路径添加到$PATH里不就行了嘛!是的,可以,但是,当你在你执行"ls"这个命令时:恰好有个文件也叫"ls"(不是你放置的),并且是木马,想想会是什么后果?第二条命令的意思是:执行当前目录下的"hack"文件,其实也是间接的指明了路径。其中的"."表示当前路径,“.."表示当前目录的上一级目录。
说的不是很清楚,希望对你有帮助!
目前国内主要的linux厂商都有那些。除了服务器操作系统之外,他们还有其他那些产品?
国内这几年linux行业发展不尽如人意,虽然国家支持力度比较大,一大部分的linux都是政府采购,但是整体来讲,国内linux行业发展不是很好,现在的国内的主要linux厂商包括中科红旗、中标软件、先锋软件、新华linux,还有冲浪linux等,最近比较引人关注的是广东新支点公司,推出了新支点服务器操作系统。目前除了服务器操作系统之外,像红旗主要是做桌面linux操作系统和服务器操作系统的,中标也差不多,其他的也有做嵌入式操作系统的。综合来讲的话,还是服务器操作系统市场比较广。
在学校的校园网用自己的电脑如何架设服务器?
楼主对网站探索值得赞扬,只是基本概念有点模糊,你们的学校内部是一个巨型的局域网,甚至可能还分为不同的网段,构成一个一个的网络小岛 (如果人数太多)。一般你如果在你电脑上构建了网站服务器,处于你学校局域网的同学应访问你的 IP来访问你的网站 格式是 http://192.168.1.23 ,所谓的IP相同是指你的访问外网只有一个合法的 IP地址,你用花生壳来申请是不错的,但是在你学校网络是无法实现的,花生壳会在你的电脑上安装一个程序,这个程序会在你上网的时候发送你现在的IP地址给花生壳服务器,来实现域名转向功能,可惜的是你们学校只有一个合法的IP,在这个IP下有N个同学的电脑上网 ,自然花生壳将其域名转换到你学校的合法IP时候,就不知道该发给哪台电脑了。所以就会出现以上错误,一般解决办法是直接到学校的主路由器上做个端口映射,这个端口连接你的电脑,让花生壳知道该将域名转到这个端口上,就可以在外网访问你的电脑了。格式是 http://233.123.122.13:30 其中30就是映射到你电脑的端口,前面的 http://233.123.122.13 假设是你的学校合法的唯一IP地址。
怎么做校园BBS论坛
想做个我自己大学的校园论坛,想把论坛直接架设到自己学校的网站上”
这个容易,只要你能做的了主,详细步骤给你说下吧!
1、不需要购买域名,用你们学校原先的域名重新解析个域名比如原域名www.zhhsw.net ,na 那么你解析个域名为bbs.zhhsw.net即可。
2、在原先的空间上新建一个文件夹,取名bbs,并且把新解析的域名绑定到这个文件夹,前提是你的空间必需支持一个子目录。
3、下载程序安装到你新建的子目录内,一般用discuz!程序,免费的。(如果你做不来,我可以免费帮你下,其实很简单)
4、你学校的官方网导航栏上加个bbs连接即可!
就这样就可以了,还不要花钱,如果你的空间不支持子目录,那么你最多开个子目录,30元就够了,其它还有数据库是否支持php的,如果支持更好,不支持再开,几十元钱的!
我想学习LINUX,应该怎么学_如何自学linux
Linux主体分为“运维”与“开发”两个方向,无论你是Linux相关从业者,还是说爱好都可以归类到这里,其中“运维”一般是初学者或者转行人员的首选,而Linux运维主要是对服务器稳定、性能与安全方面的维护和调试。实际上Linux入门并不困难,只要具备Linux基础,读懂Linux的命令格式,大多数的服务架构都是可以按照文档部署出来。当然做Linux开发,个人建议去参加培训学习更有效率,如果报班学习则大概需要4-6个月时间。学习主要内容有:1)网络基础与linux系统的管理2)优化及高可用技能3)虚拟化与云平台技术4)开发运维毕业后可从事的工作有:1)Linux运维工程师2)数据库工程师3)云计算运维工程师4)自动化运维工程师5)云计算架构工程师等互联网行业目前还是最热门的行业之一,学习IT技能之后足够优秀是有机会进入腾讯、阿里、网易等互联网大厂高薪就业的,发展前景非常好,普通人也可以学习。想要系统学习,你可以考察对比一下开设有相关专业的热门学校,好的学校拥有根据当下企业需求自主研发课程的能力,能够在校期间取得大专或本科学历,中博软件学院、南京课工场、南京北大青鸟等开设相关专业的学校都是不错的,建议实地考察对比一下。祝你学有所成
如何才能学好linux?
来自百度经验针对如何才能学好linux的网络资料 目前比较学习Linux系统比较火的论坛 谈谈如何学习Linux操作系统,来自51cto网络资料,参考资料http://ixdba.blog.51cto.com/2895551/569329 真正想学好linux系统,还是要研究linux内核源码。 为什么这么说呢? 无论是使用linux里面的一些命令,还是做linux应用层的开发,其实都是在使用linux内核的功能,但是其实你对linux底层的机制并不了解。长远来看,其实对你技术的提升不大。 比如: 1. 你天天使用linux里的docker命令,那你知道docker是如何做到这种隔离性的吗? 2. 你写linux应用程序,会看到入口是main()函数。那么,问题来了,为什么是main()呢?为什么不是hello()、不是fuck(),不是love()呢? 3. 你写linux应用程序,也会用write()函数。这个write函数,我们代码里并没有实现它,那是谁实现了它?是c库吗?有可能。但是如果我是写磁盘呢?c库能做到吗? 显然不能!还是需要linux内核的功能。 4. 我们知道,在linux里,不同的应用程序可以共享一个动态链接库,这又是怎么做到的?不是说进程是隔离的吗?为什么对动态链接库就不做隔离了? 5. linux应用层调用malloc是直接调用到内核吗? 很显然不是! c库里也有内存管理,c库里的内存管理单元会向内核批发内存(以page为单位),然后向应用程序零售内存(更小的粒度,可以是int大小,char大小等) 6. linux里进程和线程的共同点和差别究竟是什么?不要拿教科书里那一套来说教,从代码里得到的才是真知。 .... 问题太多了,难道你不好奇吗? 如果你不好奇,那很显然你不太适合做技术,在技术这条路上可能走不远,应该早日转行;如果你很好奇,那就从现在开始,研究linux内核吧。 对于这个问题作为一个在linux下开发代码十几年的人,忍不住说几句 任何一门技能的学习,想要学精学透,都要付出巨大的努力,尤其是一些专业性比较强的技能,更需要持之以恒长期不断的投入大量的精力去学习和实践,比如linux的学习,就是一门专业性非常强的技能,如何能学好这项技能。 如何才能学好那? 思想上的重视 首先要明白自己为什么要学习linux,学习linux能给自己带来什么,也就是说要知道学好linux对自己的重要性。当从思想上认识到一件事对自己的重要性有多大的时候,就会投入多大的精力去做这件事。 行动上的具体 有了思想上的重视,下面就需要具体的行动 (1)从基础知识学习,打好基本功;任何一门新知识的学习,都要了解它的一些基本内容,基本概念等等,这样就需要找一本介绍linux的专业书籍,先大致了解一下linux的相关内容,不至于后期学习linux的时候,连一些最基本的专业名称都搞不懂。 (2)勤学多练,多多思考;linux是一门实用性非常强的技术,基础理论的学习就是为了应用的更好实现,应用的实现反过来也会使理论的知识更加巩固;找一套功能比较齐全的开发板,在开发板上实现各种功能,不断地去实践,带着问题去寻找答案,当看着自己设计的功能在开发板上实现,会乐此不彼。 总之,学好 Linux 绝非一朝一夕之事,时间、知识的积累是必不可少的 Linux是一个很大的概念,建议先从简单的入手,结合你的兴趣、工作内容,在某一方面深挖,来张图介绍Linux的学习升级。 初学入门Linux的话,可以先安装一个桌面版的Linux虚拟机(Ubuntu、CentOS7等都行),以熟悉常用命令为主,待基本掌握环境后,可以研究一下 内核源码 及 常用服务器的搭建,加深理解和应用,下面我简单介绍一下Linux的学习过程,感兴趣的朋友可以尝试一下: 01 安装Linux 这里建议安装一个桌面版的Linux虚拟机(Ubuntu、CentOS7等发行版本都行),初学入门的话,如果对Linux完全不熟悉,安装迷你版会非常不适应,许多功能和包都需要自己适配下载,可以先使用桌面版,不至于完全手足无措,后期熟悉环境后,可以使用无界面版,操作起来也会非常容易: 02 入门Linux Linux虚拟机安装好后,就是Linux基础入门,这里网上教程和资料非常多,像慕课网、菜鸟教程、B站等都有大量优质视频和文档,当然,你也可以找一本专业的Linux书籍,一边学习一边练习,《 鸟哥的私房菜 》就非常不错,覆盖面比较广,讲解的也非常细致,常见的基础命令和配置等都要熟悉掌握,这些是使用Linux的基础: 03 深入Linux Linux基础熟悉后,就是深入Linux的过程,这里可以学习和研究的东西就非常多了,基础的Linux应用,包括服务器搭建、嵌入式开发等,都有非常光明的前景,当然,你也可以研究一下Linux内核,包括内存管理、进程管理、文件系统、驱动等,对于深入理解操作系统来说,可以说是大有裨益: Linux毕竟只是个操作系统,只要掌握了正确的学习方法,不会有多难。今天咱们就好好看看,Linux到底怎么学才是正确的学习方法。转自——马哥linux运维 一、从命令开始从基础开始 常常有些朋友一接触Linux 就是希望构架网站,根本没有想到要先了解一下Linux 的基础。这是相当困难的。虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行,无论图形界面发展到什么水平这个原理是不会变的,Linux命令有许多强大的功能:从简单的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文件的制作。这里笔者把它们中比较重要的和使用频率最多的命令,按照它们在系统中的作用分成几个部分介绍给大家,通过这些基础命令的学习我们可以进一步理解 Linux系统: 安装和登录命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh 文件处理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln 系统管理相关命令: df、 top、 free、 quota 、at、 lp、 adduser、 groupadd kill、 crontab、 tar、 unzip、 gunzip 、last 网络操作命令:ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogin rcp 、finger 、mail 、nslookup 系统安全相关命令: passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、 pswho 二、选择一本好的Linux书籍 在各个Linux论坛中,我们看到最多的问题往往是某个新手,在安装或使用linux的过程中遇到一个具体的问题就开始提问,很多都是重复性的问题,甚至有不少人连基本的问题描述都不是很清楚。这说明很多初学linux的人还没有掌握基本功。怎样才能快速提高掌握linux的基本功呢? 最有效的方法莫过于学习权威的linux工具书,工具书对于学习者而言是相当重要的。一本错误观念的工具书却会让新手整个误入歧途。目前国内关于 linux的书籍有很多不过精品的不多,笔者强烈建议阅读《鸟哥的Linux私房菜 基础篇》,现在出到了第三版。新手最好能够买一本纸版书来仔细研读,并认真做好学习笔记。当然,如果习惯看电子书,也可以从这里 下载 PDF电子书。 三 、养成在命令行下工作的习惯 一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢,但是熟悉后,您未来的学习之路将是以指数增加的方式增长的。从网管员来说,命令行实际上就是规则,它总是有效的,同时也是灵活的。即使是通过一条缓慢的调制解调器线路,它也能操纵几千公里以外地远程系统。 四、用Unix思维思考Linux 由于Linux是参照Unix的思想来设计的,理解和掌握它就必须以Unix的思维来进行,而不能以Windows思维。不可否认,windows 在市场上的成功很大一部分在于技术思想的独到之处。可是这个创新是在面对个人用户的前提下进行的,而面对着企业级的服务应用,它还是有些力不从心。多年来在计算机操作系统领域一直是二者独大:unix在服务器领域,Windows在个人用户领域。由此可见,用户需求决定了所采用的操作系统。不管什么原因,如果要学习Linux,那么首先要将思维从Windows的“这个小河” 中拖出来,放入Unix的海洋。 五、学习shell 对于Shell(中文名称壳),习惯Windows的读者肯定是非常陌生的,因为Windows只有一个“Shell”(如果可以说是Shell的话),那就是Windows自己。用一句话容易理解的解释就是,shell是用户输入命令与系统解释命令之间的中介。最直观的说法,一种Shell有一套自己的命令。举一个容易理解的例子,Linux的标准Shel是Bash Shel;Solaris的shell是B shell;Linux的Shell是以命令行的方式表现出来的。读者可能会不理解,Windows从命令行“进化”到了图形界面,那么Linux现在还使用命令行岂不是一种倒退? 当初我刚刚接触Linux时就曾有过这种想法。可是后来发现,如果使用图形界面,那么分配给应用软件的资源就少了,在价格昂贵的服务器上,能够以较低的硬件配置实现同样的功能是非常重要的。 下面举例说明,一台服务器有1GB内存,假设其中512MB用于处理图形界面,若要安装一个需要784MB内存的数据库软件,惟一的办法就是扩大内存。但是如果使用命令行,系统可能只需要64MB内存,其它的内存就可以供数据库软件使用了。使用命令行,不仅是内存,而且CPU及硬盘等资源的占用都要节省很多。所以,作为服务器使用命令行是优点而不是缺点。既然Shell有这么多优点,就必须要学习它。 简单来说就是:兴趣,坚持,方法。 兴趣第一 对于任何事情,兴趣在很大程度上会影响你做这件事的结果。去做一件自己很感兴趣的事情,和做一件自己本来毫无兴趣却由于某种原因而不得不做的事情,其结果往往是天地之别。究其缘由,无非是对于自己感兴趣的事情,是以一种享受其中乐趣的心态去做,在不自觉中就会投入更多的心思在上面,也会更加专注,更容易一直坚持下去。而对于毫无兴趣的事情,往往是迫于某种压力才不得不做,心里或多或少会有一定排斥拒绝,甚至会有煎熬的感觉,其结果也可想而知。 对于程序开发,也是一样的。工作中,同样是程序员,却经常会有两种不同的人。一种对程序开发真的是很感兴趣,一天不写代码不看代码就如坐针毡,感觉这一天总缺少点什么,往往这种人才能成为技术人口中的大神。另外一种人,则是相反,看代码写代码完全是因为完成任务而不得不做,处理问题时能靠嘴忽悠过去的,绝不会看一眼代码,所以这种人往往技术平庸。当然,这只是从技术角度说,如果单纯看收入的话,第一种人却不见得比第二种人收入高。 所以,首先要确定自己是否对程序开发感兴趣,如果没有兴趣,那就自然不必继续下去了,完全可以换一个职业选择。然后再选择一个自己最感兴趣的方向,如内核开发,驱动开发,应用开发等等,选定方向后由浅入深,循序渐进。 持之以恒 在互联网迅猛发展的今天,我们处在一个知识迅速爆发和更新更新时代,每一天都有各种各样的新事物层出不穷,当然也会伴随着各种老的旧的东西消失。计算机技术更是如此,从编程语言到开发工具,从设计模式到系统框架,每一天每个领域都会有新的技术出现,从也会有旧的技术被淘汰被丢弃被遗忘。 这就意味着,从成为程序员的那一天开始,就不可能停止学习的脚步,不得不面对各种技术的更新换代,因此,必须要持续学习,及时更新自己的知识结构,以适应各种业务需求的变化,否则,可能就不得不面对被淘汰的结果。 找到适合自己的学习方法 就像看电影一样,同一部电影,有的人觉得精彩,有的人觉得无趣。每个人的习惯、个性、思维、背景、基础不同,学习的方法也不同,没有什么放之皆准的方法,适合自己的才是最好的。 对于入门,找到一本自己能看得懂适合自己的书。很多别人推荐的堪称圣经的经典书籍,不妨尝试一下,看自己是否能够很容易的理解和消化。如果实在看不懂,果断换一本,切忌过于勉强。刚入门时,如果长时间处于一种云里雾里的感觉,往往会对自己信心造成打击,继而一点点消耗掉继续学下去的兴趣。很多圣经级的书籍往往适合在有一定基础之后再细细品读的,却并非入门首选。 入门之后就是逐步深入了。一般来说,在实际项目中进行学习是效果最好的。做项目过程中往往能够巩固已经学到的技能,同时发现自己的知识盲点,进而消灭盲点。 此外,多读代码,多写代码。 最后的最后, 珍惜你现在的每一根头发。 linux系列有两种发行版本 1).Red Hat系,包括RHEL、fedora、centos等 2).Debian系,包括Debian、Ubuntu、Mint等 想要学习的话如果个人学习,推荐使用Ubuntu。如果是工作的话,则使用centos学习 1.学习Linux,首先就是安装Linux系统,通过镜像安装,这个过程可以先大概的了解一下linux的启动过程,对一些概念有个大致的印象 2.在安装好的系统之上,学习一些基本命令的操作,比如ls . 列出当前文件夹下的子文件和子目录,cd /root 切换到root的目录下,top命令查看一些进程的cpu,内存等资源的使用情况,ps命令同样也可以查看进程的内存等资源使用情况,pwd查看当前所在的路径等等,将这一些命令熟练的掌握 3.在掌握了linux的一些基本命令之后,那么可以进行一些服务的安装搭建练习,比如在Linux下安装搭建DNS服务器,搭建nginx服务器等等 4.进阶阶段的话,可以尝试进行内核参数的调优,比如tcp关闭连接之后保持高速通道,扩大linux系统的最大句柄打开数之类的内核参数的优化,sysctl -a可以查看目前已经加载的内核参数 5.学会了造句子,那么之后就可以写作文了。同理学会了linux的命令之后,那么可以学习一下shell的基本语句,awk sed的学习,用shell实现一些特定功能的脚本,比如可以通过cat /proc/cpuinfo加上awk命令来实现对cpu相关信息的统计等 如果你在Linux上是一个小白请看下面的回答~ 想学好Linux,先问自己几个问题。 1. 你对计算机感兴趣吗? 2. 为什么学习Linux(他能给你带来什么价值,这个价值点是否可以支持你一直坚持下去) 3.你每天可以在工作生活之余或者大学课余抽出多少时间去学习(任何的技能都是需要时间去练习+时间才能掌握的) 如果这三个问题的答案都是肯定的,那么请看下文: 我也是一个从0技术基础的小白开始学习的 推荐你一个教程:【菜鸟教程】 http://www.runoob.com/linux/linux-tutorial.html 一定要有耐心、有恒心的坚持学完,这样你对Linux才能有一定的理解 学习的中间需要您自己不断的实操,自己去敲命令,去安装,去验证
初学者要怎么样学习linux?
对于刚刚开始学习linux我们,感觉这个系统真的很不好学,用着也不习惯,经常用的window系统想必大家都很熟悉,所以说熟能生巧,天通苑北大青鸟认为学习linux在于积累,每天掌握几个命令,每天多练习,多敲几遍,慢慢就会掌握。随着互联网的大爆发,政府、公司等对网络安全的逐渐重视,linux也得到了更多的关注,学习linux也成为了很多热爱技术人得选择。初学者要怎么入门就成为了当代的一个话题,我感觉你要是真的想从事这个行业,系统的培训下还是很有必要的,北大青鸟培训机构有专业的团队,经验丰富的讲师,专业辅导的项目经理会让你更快地掌握这门技术。随着IT产业的不断发展,用户对网站体验要求也越来越高,而目前主流网站后端承载系统都是Linux系统,目前Android手机全部基于Linux内核研发。企业大数据、云存储、虚拟化等先进技术都是基于Linux系统。基于当前linux需求,国内最大的培训机构北大青鸟,研发出一套完整学习linux的培养体系,独具特色的教学方法,课程体系紧跟市场需求的步伐。前期的教学课程很适合初学者接触学习linux,从而让你一步步提升,成为高新技术人才。
初学者要怎么样学习linux?
对于刚刚开始学习linux我们,感觉这个系统真的很不好学,用着也不习惯,经常用的window系统想必大家都很熟悉,所以说熟能生巧,昆明北大青鸟http://www.kmbdqn.cn/认为学习linux在于积累,每天掌握几个命令,每天多练习,多敲几遍,慢慢就会掌握。随着互联网的大爆发,政府、公司等对网络安全的逐渐重视,linux也得到了更多的关注,学习linux也成为了很多热爱技术人得选择。初学者要怎么入门就成为了当代的一个话题,我感觉你要是真的想从事这个行业,系统的培训下还是很有必要的,北大青鸟培训机构有专业的团队,经验丰富的讲师,专业辅导的项目经理会让你更快地掌握这门技术。随着IT产业的不断发展,用户对网站体验要求也越来越高,而目前主流网站后端承载系统都是Linux系统,目前Android手机全部基于Linux内核研发。企业大数据、云存储、虚拟化等先进技术都是基于Linux系统。基于当前linux需求,国内最大的培训机构北大青鸟,研发出一套完整学习linux的培养体系,独具特色的教学方法,课程体系紧跟市场需求的步伐。前期的教学课程很适合初学者接触学习linux,从而让你一步步提升,成为高新技术人才。
怎么学习Linux?
学习Linux步骤:1、先了解了解基础吧,找一本薄一点的,浅一点的书,了解一下什么是linux。有个基本了解即可。不建议马上看《鸟哥的Linux私房菜》,这本书很不错,如果你了解linux基础之后再看,对你可以说是不受益匪浅都不行。没基础看《鸟哥的Linux私房菜》比较痛苦,内容很多。2、了解之后,在自己电脑上弄个虚拟机,装上linux系统(redhat或ubuntu都行)。专攻《鸟哥的Linux私房菜》。当你把这本书攻下来时,才知道原来命令行并不可怕,自己打着打着就很长啦。学linux最主要靠实践,不实践,只看书对你没好处的哦。自己在虚拟机上慢慢玩吧,玩多了就知道咋回事啦。不懂的多找资料弄懂,弄懂之后再实践,这才会有收获。
如何学习linux?
学习Linux步骤:1、先了解了解基础吧,找一本薄一点的,浅一点的书,了解一下什么是linux。有个基本了解即可。不建议马上看《鸟哥的Linux私房菜》,这本书很不错,如果你了解linux基础之后再看,对你可以说是不受益匪浅都不行。没基础看《鸟哥的Linux私房菜》比较痛苦,内容很多。2、了解之后,在自己电脑上弄个虚拟机,装上linux系统(redhat或ubuntu都行)。专攻《鸟哥的Linux私房菜》。当你把这本书攻下来时,才知道原来命令行并不可怕,自己打着打着就很长啦。学linux最主要靠实践,不实践,只看书对你没好处的哦。自己在虚拟机上慢慢玩吧,玩多了就知道咋回事啦。不懂的多找资料弄懂,弄懂之后再实践,这才会有收获。
如何系统的学习Linux驱动开发
在学习之前一直对驱动开发非常的陌生,感觉有点神秘。不知道驱动开发和普通的程序开发究竟有什么不同;它的基本框架又是什么样的;他的开发环境有什么特殊的地方;以及怎么写编写一个简单的字符设备驱动前编译加载,下面我就对这些问题一个一个的介绍。一、驱动的基本框架1. 那么究竟什么是驱动程序,它有什么用呢:l 驱动是硬件设备与应用程序之间的一个中间软件层l 它使得某个特定硬件能够响应一个定义良好的内部编程接口,同时完全隐蔽了设备的工作细节l 用户通过一组与具体设备无关的标准化的调用来完成相应的操作l 驱动程序的任务就是把这些标准化的系统调用映射到具体设备对于实际硬件的特定操作上l 驱动程序是内核的一部分,可以使用中断、DMA等操作l 驱动程序在用户态和内核态之间传递数据2. Linux驱动的基本框架3. Linux下设备驱动程序的一般可以分为以下三类1) 字符设备a) 所有能够象字节流一样访问的设备都通过字符设备来实现b) 它们被映射为文件系统中的节点,通常在/dev/目录下面c) 一般要包含open read write close等系统调用的实现2) 块设备d) 通常是指诸如磁盘、内存、Flash等可以容纳文件系统的存储设备。e) 块设备也是通过文件系统来访问,与字符设备的区别是:内核管理数据的方式不同f) 它允许象字符设备一样以字节流的方式来访问,也可一次传递任意多的字节。3) 网络接口设备g) 通常它指的是硬件设备,但有时也可能是一个软件设备(如回环接口loopback),它们由内核中网络子系统驱动,负责发送和接收数据包。h) 它们的数据传送往往不是面向流的,因此很难将它们映射到一个文件系统的节点上。 二、怎么搭建一个驱动的开发环境因为驱动是要编译进内核,在启动内核时就会驱动此硬件设备;或者编译生成一个.o文件, 当应用程序需要时再动态加载进内核空间运行。因此编译任何一个驱动程序都要链接到内核的源码树。所以搭建环境的第一步当然是建内核源码树1. 怎么建内核源码树a) 首先看你的系统有没有源码树,在你的/lib/ modules目录下会有内核信息,比如我当前的系统里有两个版本:#ls /lib/ modules2.6.15-rc7 2.6.21-1.3194.fc7查看其源码位置:## ll /lib/modules/2.6.15-rc7/buildlrwxrwxrwx 1 root root 27 2008-04-28 19:19 /lib/modules/2.6.15-rc7/build -> /root/xkli/linux-2.6.15-rc7发现build是一个链接文件,其所对应的目录就是源码树的目录。但现在这里目标目录已经是无效的了。所以得自己重新下载b)下载并编译源码树有很多网站上可以下载,但官方网址是:http://www.kernel.org/pub/linux/kernel/v2.6/下载完后当然就是解压编译了# tar –xzvf linux-2.6.16.54.tar.gz#cd linux-2.6.16.54## make menuconfig (配置内核各选项,如果没有配置就无法下一步编译,这里可以不要改任何东西)#make…如果编译没有出错。那么恭喜你。你的开发环境已经搭建好了三、了解驱动的基本知识1. 设备号1) 什么是设备号呢?我们进系统根据现有的设备来讲解就清楚了:#ls -l /dev/crwxrwxrwx 1 root root 1, 3 2009-05-11 16:36 nullcrw------- 1 root root 4, 0 2009-05-11 16:35 systtycrw-rw-rw- 1 root tty 5, 0 2009-05-11 16:36 ttycrw-rw---- 1 root tty 4, 0 2009-05-11 16:35 tty0在日期前面的两个数(如第一列就是1,3)就是表示的设备号,第一个是主设备号,第二个是从设备号2) 设备号有什么用呢?l 传统上, 主编号标识设备相连的驱动. 例如, /dev/null 和 /dev/zero 都由驱动 1 来管理, 而虚拟控制台和串口终端都由驱动 4 管理l 次编号被内核用来决定引用哪个设备. 依据你的驱动是如何编写的自己区别3) 设备号结构类型以及申请方式l 在内核中, dev_t 类型(在 中定义)用来持有设备编号, 对于 2.6.0 内核, dev_t 是 32 位的量, 12 位用作主编号, 20 位用作次编号.l 能获得一个 dev_t 的主或者次编号方式: MAJOR(dev_t dev); //主要MINOR(dev_t dev);//次要l 但是如果你有主次编号, 需要将其转换为一个 dev_t, 使用: MKDEV(int major, int minor);4) 怎么在程序中分配和释放设备号在建立一个字符驱动时需要做的第一件事是获取一个或多个设备编号来使用. 可以达到此功能的函数有两个:l 一个是你自己事先知道设备号的register_chrdev_region, 在 中声明:int register_chrdev_region(dev_t first, unsigned int count, char *name);first 是你要分配的起始设备编号. first 的次编号部分常常是 0,count 是你请求的连续设备编号的总数. name 是应当连接到这个编号范围的设备的名子; 它会出现在 /proc/devices 和 sysfs 中.l 第二个是动态动态分配设备编号int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name);使用这个函数, dev 是一个只输出的参数, 它在函数成功完成时持有你的分配范围的第一个数. fisetminor 应当是请求的第一个要用的次编号; 它常常是 0. count 和 name 参数如同给 request_chrdev_region 的一样.5) 设备编号的释放使用不管你是采用哪些方式分配的设备号。使用之后肯定是要释放的,其方式如下:void unregister_chrdev_region(dev_t first, unsigned int count);6) 2. 驱动程序的二个最重要数据结构1) file_operation倒如字符设备scull的一般定义如下:struct file_operations scull_fops = {.owner = THIS_MODULE, .llseek = scull_llseek, .read = scull_read, .write = scull_write, .ioctl = scull_ioctl, .open = scull_open, .release = scull_release, };file_operation也称为设备驱动程序接口定义在 , 是一个函数指针的集合. 每个打开文件(内部用一个 file 结构来代表)与它自身的函数集合相关连( 通过包含一个称为 f_op 的成员, 它指向一个 file_operations 结构). 这些操作大部分负责实现系统调用, 因此, 命名为 open, read, 等等2) File定义位于include/fs.hstruct file结构与驱动相关的成员l mode_t f_mode 标识文件的读写权限l loff_t f_pos 当前读写位置l unsigned int_f_flag 文件标志,主要进行阻塞/非阻塞型操作时检查l struct file_operation * f_op 文件操作的结构指针l void * private_data 驱动程序一般将它指向已经分配的数据l struct dentry* f_dentry 文件对应的目录项结构3. 字符设备注册1) 内核在内部使用类型 struct cdev 的结构来代表字符设备. 在内核调用你的设备操作前, 必须编写分配并注册一个或几个这些结构. 有 2 种方法来分配和初始化一个这些结构.l 如果你想在运行时获得一个独立的 cdev 结构,可以这样使用:struct cdev *my_cdev = cdev_alloc();my_cdev->ops = &my_fops;l 如果想将 cdev 结构嵌入一个你自己的设备特定的结构; 你应当初始化你已经分配的结构, 使用:void cdev_init(struct cdev *cdev, struct file_operations *fops);2) 一旦 cdev 结构建立, 最后的步骤是把它告诉内核, 调用:int cdev_add(struct cdev *dev, dev_t num, unsigned int count);说明:dev 是 cdev 结构, num 是这个设备响应的第一个设备号, count 是应当关联到设备的设备号的数目. 常常 count 是 1, 但是有多个设备号对应于一个特定的设备的情形.3) 为从系统去除一个字符设备, 调用:void cdev_del(struct cdev *dev);4. open 和 release