linux 系统编程, 驱动编程 , 内核编程 有什么区别?《UNIX高级编程》的内容是哪一类的?
系统编程,注重性能,比如服务器端的编程,一般最底层使用c,自己对内存管理文件系统管理进行优化
驱动编程,主要是为了把linux一直到嵌入式设备,linux内核是一个庞大的系统,但不是所有设备都用上这些,而且对于兼容性问题,还要做一些修改。比如在iphone出来之前,都是使用嵌入式设计一些PDA和山寨手机系统
至于内核编程,其实也是对性能的追求,但内核编程调用的API级别更高,相对来说系统编程,是标准的API
《U高级编程》一般没太多说明,都是系统编程
学完驱动编程(开发)是不是就等于学习内核编程了
.
shell主要是日常的系统管理等用..知道些规则就行了..有兴趣可以再深入
不过我是推荐先学下普通的应用程序...大致了解下linux下管道、同步、进程通信等等的特点...比较利于理解...然后再去看内核编程的时候,能对接上...我是这么个感觉...
内核编程主要是涉及到底层实现机制,编程的限制比较多...看书的时候比较费劲了..其他没什么了..
什么是LINUX内核编程
真佩服楼上的2位对“内核编程”的理解力!
简单说,Linux内核编程就是开发Linux驱动程序,学会内核编程后,将会对操作系统的内部机制和工作原理有充分了解,可以从事硬件驱动开发、嵌入式系统开发等。内核编程的语言仍是传统的C语言,但其编写方法和调用接口与传统应用程序的差别较大,你必须了解如何处理中断、如何在内核态和用户态之间转换、PCI、DMA、内核地址映射、内核I/O等,这不是《UNIX高级编程》所涉及的内容,可以找一本专门讲Linux驱动编程的书看看,或在网上搜寻相关资料(关键词:Linux DDK)。不过先提醒一句,学习内核编程的难度很大,必须做好长期心理准备
linux内核编程
有点晕,总是看错……
你什么系统?编译什么源代码?
干嘛用?
linux改版过很多次,经常修改内核头文件。
------------
http://dirac.org/linux/writing/lkmpg/2.6/chinese/lkmpg_chs/#AEN148
这里的 hello-1.c 我编译通过了,也能载入内核,你参考一下吧,这个是基于 2.6.x 的。你编译出问题,可能是编译的方法有错误。需要引用内核才能正确编译,内核好像至少要安装上 linux-header 部分,最好能自己先编一个内核装上。(发行版自带的 config + 自带的源代码就行,为的是尽可能的全)
学习windows驱动编程有什么用?
驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序。可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。驱动程序在系统中所占的地位十分重要, 驱动程序给我的首先印象应该是面对设备与操作系统的,但是并不一定每一个驱动程序都是与硬件相关联的.在实际的驱动程序开发中不要狭义的理解为硬件,应该理解为设备,硬件也可以叫做设备,在计算机系统中虚拟的也可以是设备,比如 磁盘卷,分区、网络协议、以及其他的设备驱动程序都是设备,那么与硬件无关的驱动程序,比如NDIS驱动,文件过滤系统驱动、磁盘过滤系统驱动程序、文件透明加密驱动... 他们所面对的设备不一样而已 我们形象的理解为NDIS是与网络中间层通讯协议(设备)驱动,卷(设备)过滤驱动,文件系统(设备)过滤驱动。 INTEL的CPU从286开始引入保护模式,特权级分为四层,为:PL0-PL3,对应该操作系统中一般称为RING0-RING3,但其实WINDOWS只用了RING0和RING3两层,分别为OS核心层和用户程序层。驱动程序的强大之处就是因为他在OS核心层(Ring0)运行,在RING0层运行有什么强大的呢,因为操作系统的保护模式限制,在RING3层很多操作受到限制,比如 直接IO硬件、开启/关闭中断等等特权指令必须在RING0层才能执行、如果你在RING3层执行此类代码就会收到一个类似于 【应用程序指令错误】的消息提示,而相关的应用程序也会被WINDOWS终止,在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃,所以在RING3受到限制.必须在RING0下运行. 如何理解驱动程序的重要性与强大之处,再看看我们在操作计算机的内部流程,我们简单的理解为 输入-应用程序--内核-设备,在这里在最后有个‘设备’但是某些操作的流程并不是一定是与设备有关的,可能仅仅是一系列的简单的操作仅仅是与API有关的.比如OpenProcess、 NtTerminateProcess 在应用程序调用的时候,在RING3的最后一步是在NTDLL 最终由NTDLL进入内核 ,基本上可以这样概括一下,就是所有的操作在进入计算机底层以后都要进过相关驱动程序,在这些功能调用上用个形象的说法 应用层是‘标’,那么驱动层就是‘本’,还有就是驱动层作为操作系统与设备(不一定是硬件)的中间桥梁,有着一夫当关的重大作用,哈哈.... 太多说不完,LZ自己找资料看看..
linux 怎么调用内核导出的函数
Linux内核没有导出的函数不能调用,即使包含了头文件,也会出现符号未定义的警告,并在加载模块时失败。
以下是我的测试例子:
#include
#include
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Linmiaohe");
MODULE_DESCRIPTION("try to evole sys_umount");
extern asmlinkage long sys_umount(char __user *name, int flags);
static int __init sys_umount_init(void)
{
sys_umount("./proc",0);
return 0;
}
static void __exit sys_umount_exit(void)
{
printk(KERN_INFO "***********sys_umount module has been unregistered*************\n");
}
module_init(sys_umount_init);
module_exit(sys_umount_exit);
linux下编程什么语言用的多
或特别的跟系统相关不大的,可以考虑用C++;
在动态网页上还可以用perl、python、java之类的;
一般系统管理员和普通用户,用的最多的恐怕就是bash了,shell可以完成一系列动作和自动化管理。当然,这里也可以用perl或python之类的脚本语言
由此看来,在linux里编程:
1. 接近系统的软件开发必然是C;
2. 系统关联不大的应用程序开发可以用C或C++;
3. 动态网页方面可以用perl或python脚本语言或java;
4. 日常管理上,当然是bash!
5. 做GUI界面开发的话,很多人用GTK,也有很多人用Qt;
因此,说C是linux编程的主流一点都不过分。这也是linux这个开源环境和本身机制所导致的,就连linus都力挺C,而驳斥C++。虽然没必要拒绝C++,但是,不可否认,C更适合linux~
另外,虚机团上产品团购,超级便宜
在Linux下编程一般用什么语言?
1)脚本类的,大约有十来种,比DOS中的批命令和WINDOWS中的CMD强多了,比较简单,许多小工具程序都是用它写的,一般用户也应该学一些,可以解决许多日常的问题,以及一些比较轻量级的程序问题,这类语言又称SHELL,举例:BASH。后来又有许多更复杂、功能更强的脚本语言,例如PERL,JAVA等。 2)正规的编程语言:C/C++、汇编语言等。许多主要的比较复杂的程序还都是用它们设计的。包括核心系统本身。 3)专用的语言,LINUX中有一个X视窗,它们有一些比较专用的设计语言,各个不同体系还度有些区别,它主要是用于设计在X窗口中的程序,QT、GTK+……等等 如果只允许选择一种语言,那应该还是C/C++,许多其它语言都同它有一些关系。 不过这种说法是有前提的,学好JAVA也许也很有用。它的应用范围足够大了。
ubuntu 如何安装内核头文件
ubuntu可以使用apt-get命令来安装匹配的内核头文件。1、首先,使用dpkg-query命令检查是否有可用的内核头文件。$ dpkg-query -s linux-headers-$(uname -r) 2、接着使用下面的命令安装匹配的内核头文件。$ sudo apt-get install linux-headers-$(uname -r)3、验证头文件是否成功安装。$ dpkg-query -s linux-headers-$(uname -r) Package: linux-headers-3.11.0-26-genericStatus: install ok installed提示安装成功注:Debian、Ubuntu、Linux Mint默认头文件在/usr/src下。
WINDOWS内核编程是汇编语言吗?
Windows内核是用C语言写的。世界上绝大部分的系统内核均使用C语言完成,古老的系统使用是因为当时C语言尚属先进,现代系统使用是因为C语言兼容性好。
对于windows系统来说只有硬件抽象层和其之下的是由汇编完成的,在此之上就是C语言了。
你说的那些概念都是操作系统里的概念,与具体的语言实现无关。也就是说不管使用何种语言最终生成的可执行程序(或库)均具有你说的那些结构,因为这是windows执行必须的。比如PE文件只是一种格式,入口点只是一个相对位置,导入表函数只是一些位置的排列。
当然你学过汇编后会更好的理解,不学也无妨。因为汇编介绍了计算机底层的实现,这些结构是最底层的结构嘛。看看操作系统就明白了。
你可以参考一下MS press的windows internals一书。
如何学习WINDOWS内核编程?有哪些好书
要找到最适合自己的学习方式。你可能更容易掌握条理化清晰的内容,杂乱的知识点一头雾水,那么你就需要学会梳理自己学过的知识点;你可能擅于听老师讲,自己看书效率低下,那么你一定要抓住上课有限的时间高效的掌握;你可能需要一边听一边勾勾画画写写,纯粹的听纯粹的看都不会让你注意力集中等等,找到自己学习上的一些特性,这样才能有效有针对性的解决。
linux内核,驱动,应用程三者的概念是什么?三者有什么关系?
首先,要理解操作系统的概念,操作系统是用户和硬件之间的一层媒介程序。不管是Linux还是Windows或者安卓、IOS,它的主要功能有两点:
1、有效管理硬件。
2、方便用户操作。
其次,Linux内核是Linux系统的核心程序,主要完成任务调度、内存管理、IO设备管理等等功能,主要目的是为了应用程序提供一个稳定良好的运行环境,这是一个基础。
再次,驱动程序是操作系统有效管理硬件的一个途径。应用程序是方便用户操作提供的程序,比如Shell,Linux中的bash shell以及KDE、gnome等图形Shell都是应用程序。 你可以简单的理解为驱动程序实现了操作系统对硬件的有效管理,应用程序实现了操作系统方便用户操作的目的。
最后,从编程角度来看,Linux内核就是一个调用库,应用程序通过调用Linux提供的API函数来实现操作,Linux内核通过与驱动通信实现对硬件的有效管理。具体的编程细节,需要自己在实践编程中体会。这是一个整体的描述。
关于Windows内核编程的问题
其实Windows内核编程不但有用,而且常用。很多我们每天都使用的软件,就毫无疑问的使用了Windows内核编程的技术。最典型的就是实时监控的杀毒软件。此外还有防火墙、虚拟光驱、以及90%的驱动程序。这些程序的有一个共同的特点,他们的一部分组件,是作为Windows的一部分,能对 Windows上运行的所有的应用程序起作用。
因此内核编程的应用,往往给传统软件带来更强的功能,实现技术上的飞跃。
举个例子。我们常常听说,对文件进行加密,可以使文档更加安全。对文件加密并不需要任何内核组件。我们可以写一个应用程序,读入文件,加密数据,然后重写为一个加密文件。解密也可以同样如此。
但是实际上这并不满足一般的用户需求。对一个公司的员工来说,那些“重要的文档”很可能就是每天工作所用的文件。想象一下,他必须要每天从服务器上下载加密的文件,然后用解密工具解密。然后用Office开始工作。工作完毕后,用加密工具加密,再上传,然后删除工作文档。且不说大部分时间文档是以解密的方式保存在硬盘上的不安全性,这个工作流程是可以接受的吗?没有人会接受的。
比较“人性化”的方式就是让Office可以直接打开已经加密的文档。保存的时候,直接就保存成加密的文档。硬盘上,这个文档始终是加密的。而且对合法的用户透明。对非法的用户,则只能看见密文,从而无法编辑也无法阅读。而且也不仅仅Office,还有AutoCAD、Visual Studio、Photoshop等等用户可能用于编辑机密文件的所有的工具。这是可以实现的吗?如果我们不能去修改Office和其他的工作软件。
这当然是可以实现的。既然我们编写Windows内核程序,当然可以让Windows的文件系统从硬盘读取文件的时候,对特定的进程进行特别的解密。等这些软件读取到数据的时候,它们读到的已经是正常的数据了。这个过程和实时扫描病毒的原理是一样的,使用一个文件过滤驱动程序。这就是读者可能已经听到过的文件透明加密技术。
在和《天书夜读:从汇编语言到Windows内核编程》一书同一系列的《寒江独钓——Windows内核编程与信息安全》(预计明年出版)中,对键盘过滤、硬盘过滤、文件过滤、网络过滤等安全相关的内核编程,都有详尽的讲解和例子。
内核编程的另一个特点是:这些代码运行在R0级。R0级别是最高特权级别。对CPU有完全控制的能力。这非常的适合一些安全软件,当然也适合做破坏的工作。因为内核程序有最高(也就是根)权限,这样的技术在安全领域(或者破坏领域)被称为rootkit技术。rootkit技术是当前安全领域最热门的技术之一。
许多病毒使用了rootkit技术。用来隐藏病毒文件,窃取密码、发送攻击包等等。rootkit病毒感染后极难清除,在感染前提前防范是最有效的办法。
Windows内核确实没有公开源代码。但是MS提供Windows内核程序的开发包:WDK。WDK实际上主要用于开发驱动程序。而驱动程序基本上都是内核程序。WDK提供的头文件以及部分源代码,实际上就是Windows内核的代码的一部分。有部分驱动程序(比如FAT32文件系统)的代码是完全公开的。我们也可以在这里看到Windows内核开发者的代码风格。同时,微软也提供了所有Windows版本的符号表在网上供研究者下载。并提供了功能无比强大的调试器WinDbg。有了它们,你就可以轻松的调试Windows内核了。无论是你自己写的代码的部分,还是Windows内核开发者们编写的部分。虽然看到的是汇编语言,但是函数名和全局变量名都是存在的。而且,所有的这些(WDK、WinDBG,符号表)都是免费的。