关于linux内核学习的误区以及相关书籍介绍

2023-11-05

第一篇

先说句正经的:其实我没资格写这篇文章,因为自己也就一两个月以来才开始有所领悟的。因此,这里与其说是关于linux内核学习的经验,不如说是自己的教训吧,希望不要扔鸡蛋砸我^_^

   常常有人问:我想学习内核,需要什么基础吗?linus torvalds本人是这样回答的:你必须使用过linux。 这个……还是有点太泛了吧,我想下面几个基础可能还是需要的,尽管不一定必需:
  1, 关于操作系统理论的最初级的知识。不需要通读并理解《操作系统概念》《现代操作系统》等巨著,但总要知道分时(time-shared)和实时(real-time)的区别是什么,进程是个什么东西,cpu和系统总线、内存的关系(很粗略即可),等等。
  2, 关于c语言。不需要已经很精通c语言,只要能熟练编写c程序,能看懂链表、散列表等数据结构的c实现,用过gcc编译器,就可以了。当然,如果已经精通c语言显然是大占便宜的。
  3, 关于cpu的知识。这块儿可以在学习内核过程中补,但这样的话你就需要看讲解很详细的书,比方后面将会提到的《情景分析》。你是否熟悉intel 80386 cpu?尝试着回答这几个问题来判断一下:1)说出80386的中断门和陷阱门的区别;2)说出保护模式与实模式的区别;3)多处理器机器上,普通的读- 改-写回一块内存这样的动作,为什么需要特殊的手段来保护。等等。讲解基于其它cpu的linux内核的书,目前好象只有一本《ia64linux内核:设计与实现》──也还是intel的,其它都是讲解基于ia32的。
  以上算是知识方面吧,如果还要再补充一条,我想就是:动手编译过内核。


  好了,我们接下来走。好多人装上linux之后,第一件事找到内核源码所在的路径,打开一个c程序文件,开始哗哗哗翻页,看看大名鼎鼎的linux内核代码到底长啥模样──然后关闭。这是可理解的,但却不是学习的方法。刚开始,必须从读书入手。至少要对内核有一个overview之后,才有可能带着问题去试图阅读源代码本身。 下面就讲一下我读过的几本书:
  1, 《linux内核设计与实现》(1),英文名linux kernel development(所以有人叫它lkd),机械工业出版社,¥35, 美国robert love著,陈莉君译者。 评说:
  此书是当今首屈一指的入门最佳图书。作者是为2.6内核加入了抢占的人,对调度部分非常精通,而调度是整个系统的核心,因此本书是很权威的。这本书讲解浅显易懂,全书没有列举一条汇编语句,但是给出了整个linux操作系统2.6内核的概观,使你能通过阅读迅速获得一个overview。而且对内核中较为混乱的部分(如下半部),它的讲解是最透彻的。对没怎么深入内核的人来说,这是强烈推荐的一本书。
   翻译:翻译水平、负责任程度都不错,但是印刷存在一些错误。买了此书的朋友可以参考我在linux高级应用版的《linux内核设计与实现中文版勘误》:
http://bbs.chinaunix.net/forum/viewtopic.php?t=541234
另外,此书2005年有了第二版,目前尚无中译本面世。我就是对照着2nd-en勘误1st-cn的。

  2, 《linux内核源代码情景分析》(可不看,用《深入理解linux内核》代替)上、下。毛德操、胡希明著,浙江大学出版社,上册¥80,下册¥70. 评说:
  本书是基于2.4.0内核的,比较早,也没听说会出第二版。上册讲解内存管理、中断、异常与系统调用、进程控制、文件系统与传统unix ipc;下册讲解socket、设备驱动、smp和引导。关于这套书的评价褒贬不一,我个人认为其深度是同类著作中最优秀的。本书基于intel ia32体系,由于厚度大,很多体系上的知识都捎带讲解了,所以如果你想深入了解内核的工作机制而又不非常熟悉intel cpu的体系构造,本书是最合适的。缺点是:版本较老,没有tcp/ip协议栈部分(它讲的socket只是unix域协议的),图表太少,不适合初学者入门。还有就是对学生朋友来说,可能书价偏高,这样的话可以考虑先买上册,因为上册是核心部分,下册一大部分都在讲具体pci/isa/usb设备的驱动。
  翻译:没什么翻译,作者是国人,而且行文流畅。本人书桌上诸多计算机经典图书当中,这套是唯一又经典又无阅读障碍的。
   www.linuxforum.net内核版好多朋友已经把这书读到六七遍了,我很惭愧,上册差不多读熟了,下册就smp部分还看过──但这就花费了整整 1年的时间,还有好多弄不懂的。这里顺便说明另外一个研究内核常见的误区:目标太庞大。要知道linux内核(最新的2.6.13)bzip2压缩之后 37m,解压缩之后244m,根本不是哪个人能够吃透的。即使是内核的核心开发团队中,恐怕也只linus torvalds、alan cox、david miller、ingo molnar寥寥数人会有比较全面的了解,其它人都是做自己专门的部分。我自己来说,目前已经决定放弃内存管理的全部(slab层、lru、rbtree等)、文件系统部分、外设驱动部分,暂时也没打算弄ia32以外的其它体系的部分。

  3, 《深入理解linux内核》第二版。中国电力出版社。也是陈莉君译。此书是linux内核黑客在推荐图书时的首选。 评说:
  此书c版的converse兄送了我一本第一版,因此就没买第二版,比较后悔。因此只就第一版说一说,第一版基于2.2,第二版2.4 。我见o””reilly官方主页上说第三版的英文版将于2005年11月出版,也不知咱们何时才能见到。此书图表很多,形象地给出了关键数据结构的定义,与《情景分析》相比,本书内容紧凑,不会一个问题讲解动辄上百页,有提纲挈领的功用,但是深度上要逊于《情景分析》。

  4, 其它的几本书。市面上能见到的其它的linux内核的图书,象《linux设备驱动程序》、《linux内核源代码完全注释》以及新出的《linux内核分析及编程》等。
  《linux设备驱动程序》(2)第二版是基于2.4的,中文翻译不错,中国电力出版。这书强调动手实践,但它是讲解“设备驱动”的,不是最核心的东西,而且有些东西没硬件的话无法实践,可能更适合驱动开发的程序员吧,不太适合那些for fun and profit的人。此书有第三版英文版,东南大学出版社影印,讲解2.6的,行文流畅,讲解的面也比第二版更广泛,我读过其中关于同步与互斥、内存分配的部分,感觉很不错。
  《linux内核源代码完全注释》(机械工业出版社)是同济大学的博士生赵炯的著作,讲解0.1linux内核,我没买也没看,有看过的朋友说一说。
  《linux内核分析及编程》(电子工业出版社)是刚刚出版的,国人写的,讲解2.6.11 。很多人说好,但有人说不够系统,我没买,不敢评说。
  还有一本清华出的《linux内核编程指南(第三版)》,原书应该是好书,但是翻译、排版十分糟烂,脱字跳行,根本没法看,我买了一本又扔掉了。

  5, 其它资源。 tldp(the linux documentation project)有大量文档,其中不少是关于内核的,有些是在国外出版过的,象《linux kernel interls》《the linux kernel》《linux kernel module programming guide》等,作者都是亲身参加开发的人,著作较为可信。
http://www.linuxforum.net
  中国linux论坛的内核版。该版是研究内核的中文linux社区中水平最高的,有很多专家级别的牛人,强烈推荐去学习一下(但建议不要问太过分简单的问题,人家脾气再好也会烦的^_^),它的置顶贴简直是一个包罗万象的faq,精华区也有很多资料。只可惜太过曲高和寡,人气不是很旺。

  6, 一本不是讲解linux的书:《现代体系结构上的unix系统:内核程序员的smp和caching技术》,人民邮电出版社2003版,定价¥39. 本书虽然不是讲解linux,但是对所有unix内核都是适用的,适合对smp和cpu的cache这些组成原理知识不是很熟的朋友,而且是很多国外牛人推荐的书。中文版翻译非常负责。


  还有个很重要的问题:怎样浏览内核源代码。有的朋友喜欢在windows上工作,用source insight;有的在linux,用source navigator;还有专门浏览源代码的软件,象lxr(linux cross reference);还有用ctags/ectags/cscope等,这些都是很优秀的软件。我个人用vim ctags浏览(参考了www.linuxforum.net内核版wheelz大侠的文档,)。

  此外,前边已经提到的一个重要的问题是:你研究内核的目的是什么, 开发? 乐趣?如果是开发,而且是国内做开发,把kernel api熟悉一下就差不太多了(你也知道国内的水平有多差),比方说copy_from_user()、kmalloc()函数等,kernel api在internet上找得到,编译内核时也可以用docbook生成(具体请参考内核源代码包下的readme文件);如果是研究,那就差别很大了,需要下很大的苦功:会用kmalloc()绝不说明你懂得linux内核的虚存管理子系统,正如同会讲汉语不说明你懂中国文化一样。

说完了,发现前面讲的太罗嗦了,简化一下:
  1, 动手编译内核
  2, 精读《linux内核设计与实现》
  3, 上www.linuxforum.net内核版看置顶贴与精华区
  此外就凭自己兴趣选择吧。

下面是一篇没写完的《linux内核模块编程入门》,不补写了,将就着看吧。

albcamus 2005-10-13 02:41

写给linux内核新手-关于linux内核学习的误区

linux内核模块编程入门
看到昨天有好几个问linux内核编程问题的帖子,不少是卡在了入门问题上,就整理一下入门的初步流程。针对2.6内核的linux系统,需要你的机器上已经安装了kernel-devel这个包,也就是编译模块所必须的东西:内核的头文件和一些makefile。

一,hello world程序:
[code]/*file: hello.c*/
#ifndef __kernel__
#define __kernel__
#endif
#ifndef module
#define module
#endif
#include ;
#include ;
#include ;

static int hello_init(void)
{
printk(kern_alert "hello, the fucking crazy world\n");
return 0;
}

static void hello_exit(void)
{
printk(kern_alert "bye, the fucking crazy world!\n");
}

module_init(hello_init);
module_exit(hello_exit);

module_license("gpl");
module_author("albcamus <;");[/code””>albcamus@163.com>;");[/code]

2.6内核的kbuild子系统跟2.4相比有本质的改变。我们下面尝试两种方式编译这个程序:
1, 你可以在本目录下这样写一个makefile
[code]obj-m := hell.o
clean:
rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions[/code]
然后用这样的命令行编译:
make -c /lib/modules/`uname -r`/build m=`pwd` modules
这时ls一下,就能看到生成了很多文件,其中hello.ko就是我们需要的内核模块。
2, 专业点儿,makefile这样写:
[code]obj-m := hello.o
kernelbuild := /lib/modules/`uname -r`/build
default:
make -c $(kernelbuild) m=$(shell pwd) modules
clean:
rm -rf *.o .*.cmd *.ko *.mod.c .tmp_versions[/code]
然后只要make一下就可以了。

插入模块用insmod命令:
insmod ./hello.ko
这时候大家可能会问:为什么我的屏幕上没有见到输出?这个是console的日志记录级别和你printk消息时指定的级别(本例中指定为 kern_alert,为次高,仅次于kern_emerg)决定的。无论如何,你可以tail 或者cat看看系统日志的最后几行,系统日志一般为/var/log/messages,或者直接用dmesg命令,肯定能看到输出了。

二,头文件问题。
c 程序员都知道,要使用某个外部的函数,应当#include某个头文件,这个头文件包含了那个函数的原型(prototype)。内核的头文件在 include/下,其中include/asm是个符号链接,指向你所用内核的具体的体系结构目录,比方说我的系统是i386的,那么 include/asm就指向include/asm-i386 。
内核编程中我们不能链接libc库,不能使用libc库中的函数,所以很有些麻烦。一些重要的函数,象strcpy/strcmp/snprintf等,kernel也为我们实现并导出(export)了,而我们需要 #include相关的头文件,在include/linux和include/asm中,你需要自己寻找你所要使用的函数在哪个头文件中声明,并将其 #include进来。


2006年3月更新与建议 

写这篇文章的时候, LKD2已经看完了, 《情景分析》也大体翻过相关章节。 只是ULK2看的很少。 我是去年10月份买这本书的中文版的:《深入理解linux内核-第二版》, 越看越觉得后悔买的晚了, 到现在大概读完了2/3吧, 准备最迟下个月读完。 此书非常系统, 在代码罗列讲解上不如《情景分析》, 可是图表很多, 讲解深入浅出, 这一点不是《情景分析》能比的。 考虑到可能有些朋友被我这篇文章误导, 所以在这里补充一下, 并强烈推荐此书。

http://www.mmic.net.cn/news/396/31.htm

------------------------------------------------------------------------------------

另一篇

看了下各位大神的推荐路线,总结如下:

 

0. 跟着项目走;

1. 学会用、熟练用linux系统;

2. Linux Kernel Development.

3. Understanding the Linux Kernel.

4. Linux Device Driver.

5. 找一个感兴趣的子系统研究,认真研究代码,这里的建议是可以看提交的每个change。比如网络子系统:Understanding linux network internels.

“严谨而细致的仔细分析它的代码,不懂的地方就通过社区、邮件列表或者直接发Email给maintainer请教等途径弄懂,切勿得过且过”。

“通过Kconfig与Makefile定位目标代码”。

6. 融入社区做贡献……

坚持!坚持!!坚持!!!

参考:http://blog.csdn.net/fudan_abc/article/details/5403021

 

以下转自:http://bbs.csdn.net/topics/390759060

1. 了解操作系统基本概念。如果不会,可以学习《操作系统:设计与实现》Andrew S.Tanenbaum 写的那本。以MINIX为例子讲解操作系统的概念。非常推荐。
2. 有了操作系统的基本概念以后,可以了解Linux的机制了。推荐《Linux内核设计与实现》Robert Love 写的。这本书从概念上讲解了Linux有什么,他们是怎么运行的。这本书要反复认真看透。
3. 有了Linux内核的了解,还需要具体研究Linux内核源码。最经典的就是《深入理解Linux内核》Daniel P. Bovet 写的。学 习这本书的时候,要对着内核代码看着学。这本书学起来相当费力了,那么多多代码要研究。不过这本书如果学明白了,恭喜你,Linux内核你已经很熟悉了。
4. 如果要开发设备驱动,可以学习《linux设备驱动程序》O'Reilly出版社的。这本作为驱动的入门是很好的资料。另外还有一本《精通 Linux 驱动程序开发》也是不错的教材,可以参考着看。学习驱动,免不了要学习一些硬件的协议和资料,研究哪个就找到相应的硬件文档,把硬件的工作原 理搞明白。这些就不细说了。
5. 网络部分,学些Linux网络部分就学习《深入理解LINUX网络技术内幕》。这本书把Linux的网络部分讲的非常清晰透彻。但是通常不做这方面的工作研究,也不用研究这么深,毕竟现在国内相关职位较少。
6. 现在Linux相关的工作,多集中在一些嵌入式开发领域,arm,mips等,要学习以下这些体系架构的的资料,了解CPU的设计和工作方式。 ARM就看对应的芯片手册,讲的很细致。MIPS就看 《see mips run》,有一二两版,两版内容有些差异,推荐都看。
7. 补充一点经验。不要认为Linux很庞大,很复杂,就觉的很难学。任何东西认真学下来都是能学会的,看你的恒心和毅力了。另外,不要走弯路,不要看 市面上讲什么Linux0.11的那些书,直接学你要学的东西。就像学C语言看什么谭浩强一样,弯路走了,力气没少花,还严重影响学习效果。

你问的内核,多给你说几句应用编程,有时候经常会需要的:
1. 学习Linux应用编程,建议看《unix环境高级编程》,把里面的例子都做一遍,会对整个Linux编程有系统都认识。
2. 针对Linux,有本 《Linux系统编程》,学完上一本,这本很快看一遍就懂了。主要是针对Linux具体懂一些内容,讲的挺全了,很实用。
3. Linux网络编程,系统的学习一下《unix网络编程.卷1,套接字联网api》,基本上网络应用相关的程序就都没问题了。

这些内容,你分几年时间,分步计划学习,就会成为Linux高手了。

http://www.cnblogs.com/hfyinsdu/p/4632100.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于linux内核学习的误区以及相关书籍介绍 的相关文章

  • 关于linux内核学习的误区以及相关书籍介绍

    第一篇 先说句正经的 其实我没资格写这篇文章 因为自己也就一两个月以来才开始有所领悟的 因此 这里与其说是关于linux内核学习的经验 不如说是自己的教训吧 希望不要扔鸡蛋砸我 常常有人问 我想学习内核 需要什么基础吗 linus torv
  • local_irq_save和 local_irq_disable

    如果你要禁止所有的中断该怎么办 在2 6内核中 可以通过下面两个函数中的其中任何一个关闭当前处理器上的所有中断处理 这两个函数定义在
  • 使用Crash工具分析 Linux dump文件

    前言 Linux 内核 以下简称内核 是一个不与特定进程相关的功能集合 内核的代码很难轻易的在调试器中执行和跟踪 开发者认为 内核如果发生了错误 就不应该继续运 行 因此内核发生错误时 它的行为通常被设定为系统崩溃 机器重启 基于动态存储器
  • linux内核-系统调用execve()

    读者在linux内核 系统调用fork vfork与clone中已经看到 进程通常是按其父进程的原样复制出来的 在多数情况下 如果复制出来的子进程不能与父进程分道扬镳 走自己的路 那就没多大意义 所以 执行一个新的可执行程序是进程生命历程中
  • KVM内核代码结构

    KVM内核代码结构 因为KVM的源代码已经包含在了Linux的内核树中 因此我们只需直接从www kernel org下载代码即可 内核源码包打开较大 解开后目录结构大概是这个样子 涉及KVM的主要有两个目录 virt和arch x86 k
  • ARM 浮点运算详解

    一 早期ARM上的浮点模拟器 早期的ARM没有协处理器 所以浮点运算是由CPU来模拟的 即所需浮点运算均在浮点运算模拟器 float math emulation 上进行 需要的浮点运算 常要耗费数千个循环才能执行完毕 因此特别缓慢 直到今
  • linux内核开发基础(linux内核源码、树莓派源码编译、SD卡挂载)

    首先下载树莓派linux内核源码 下载网址 https github com raspberrypi linux 在树莓派使用指令 uname r查看当前树莓派的版本号 然后选择对应的linux内核版本号进行下载 将linux内核源码从共享
  • linux源代码.tar.xz解压

    刚开始学习linux内核 在linux内核官网https www kernel org 下载 我下载的版本是 linux 2 6 34 14 tar xz 由于我的linux中没有安装 xz的解压缩软件 需要下载 http download
  • 第七章 tcp发送(传输层)--基于Linux3.10

    由第五章可知 sock recvmsg和tcp sendmsg用于tcp层和应用层的接口 由第四章可知 tcp v4 rcv和tcp tarnsmit skb是传输层和网络层之间的接口 现在来看看tcp sendmsg是如何到tcp tar
  • 虚拟文件系统 (VFS)-基于linux3.10

    引言 虚拟文件系统 VFS VirtualFileSystem 介于具体的文件系统和C库之间 其用提供一个统一的方法来操作文件 目录以及其它对象 其能够很好的抽象具体的文件系统 在linux上具体的文件系统主要分为三类 l 基于非易失性的存
  • 一文让你彻底了解Linux内核文件系统

    一 文件系统特点 文件系统要有严格的组织形式 使得文件能够以块为单位进行存储 文件系统中也要有索引区 用来方便查找一个文件分成的多个块都存放在了什么位置 如果文件系统中有的文件是热点文件 近期经常被读取和写入 文件系统应该有缓存层 文件应该
  • linux支持usb打印机

    配置CONFIG USB PRINTER y inux内核默认运行打印机 核 驱动 直接在配置上CONFIG USB PRINTER y添加上去就好了 make menuconfig 选上USB打印机选项 Device Drivers gt
  • file_operations 结构体

    file operations 结构体中的成员函数是字符设备驱动程序设计的主体内容 这些函数实际会在应用程序进行 Linux 的 open write read close 等系统调用时最终被调用 file operations 结构体目前
  • linux内核的 等待队列 使用方法,wait_queue_head_t,进程休眠

    当你在用户空间需要读写一大片数据的时候 这个就用上了 以下来自 http www yuanma org data 2006 1207 article 1916 htm 假设我们在 kernel 里产生一个 buffer user 可以经由
  • linux内核对于指令异常的处理

    1 处理流程 以arm64来介绍一下流程 如果在用户层发生指令异常时 首先进入入口el0 undef arch arm64 kernel entry s el0 undef Undefined instruction enable inte
  • ubuntu从内核源代码编译内核及替换内核

    1 下载ubuntu对应的linux内核源代码 apt catch search linux source 查看当前linux内核版本 apt get install linux source lt 对应的内核版本好 gt 下载对应的lin
  • Linux内核文件系统知识大总结

    1 文件系统特点 文件系统要有严格的组织形式 使得文件能够以块为单位进行存储 文件系统中也要有索引区 用来方便查找一个文件分成的多个块都存放在了什么位置 如果文件系统中有的文件是热点文件 近期经常被读取和写入 文件系统应该有缓存层 文件应该
  • 慢慢欣赏linux pud_offset解析

    typedef struct pudval t pud pud t gt typedef u64 pudval t dir表示L0页表索引的指针 指向PUD页表的基地址 define pud offset dir addr pud t va
  • 内存文件系统提升磁盘性能瓶颈

    author skate time 2011 08 22 提升磁盘性能瓶颈 linux的内存文件系统 ramdisk ramfs tmpfs ramdisk 是块设备 在使用它们之前必须用选择文件系统将其格式化 并且调整文件系统大小比较麻烦
  • linux内核学习(7)粗略走走kbuild Makefile编译流程

    今天看Makefile文件 我头大了 此Makefile非彼Makefile 里面多了很多内置命令 比如origin patsubst等等啦 这些都没听说过 更可恶的是 连网上都没有 可见 这是一件多么伤人的事情 分析这样的 真是让人折寿啊

随机推荐

  • 人工智能正在重塑生产方式、优化产业结构、提升生产效率、赋能千行百业

    近日 清华大学科技情报大数据挖掘与服务系统平台AMiner发布 人工智能发展报告2011 2020 阐述过去十年人工智能取得的重要成果 探讨人工智能未来发展前景与蓝图 含此在内 多项人工智能研究报告均引发业界广泛关注 专家表示 作为引领新一
  • 如何方便的去除返回Date时间戳后面的0(或者做其他设置)

    这是get请求后 返回个前端的时间戳 可以看到后面有三个的0 如何去除这0呢 但我们在java里面返回的类又是date 有两个方法 一 重新定义返回视图对象 将createTime 和 updateTime定义为long 然后在赋值的时候更
  • DataGridView控件用法(二):为每行记录最后加“编辑”-“删除”按钮列

    1 在DataGridView控件用法 一 中已经显示出列表数据 这时我们需要对每行数据记录进行编辑 需要添加 编辑 删除 查看 这样的超链接 代码如下 view source print 1 为每行数据增加编辑列 2 设定列不能自动作成
  • Ansible自动化运维详细教程及playbook详解

    Ansible 一种集成 IT 系统的配置管理 应用部署 执行特定任务的开源平台 是 AnsibleWorks 公司名下的项目 该公司由 Cobbler 及 Func 的作者于 2012 年创建成立 Ansible 基于 Python 语言
  • Kafka3.0.0版本——消费者(消费者组原理)

    目录 一 消费者组原理 1 1 消费者组概述 1 2 消费者组图解示例 1 3 消费者组注意事项 一 消费者组原理 1 1 消费者组概述 Consumer Group CG 消费者组 由多个consumer组成 形成一个消费者组的条件 是所
  • vue3+vite配置全局scss

    首先下载scss sass loader sass npm install save dev sass loader npm install save dev node sass npm install save dev sass 打开vi
  • 西门子博图指令(定时器操作四)

    定时器功能指令介绍四 综述 加载脉冲定时器持续时间 介绍 程序 程序演示 加载接通延时定时器持续时间 介绍 程序 程序演示 加载关断延时定时器持续时间 介绍 程序 程序演示 加载时间累加器持续时间 介绍 程序 程序演示 源程序 综述 主要介
  • R语言 删除空行

    data lt data complete cases data 5 6 删除第五六列有空值的行 data lt na omit data 删除有空值的行 转载于 https www cnblogs com shilo930 p 11057
  • Nginx配置

    Nginx配置 一 nginx常用配置命令 二 nginx配置文件 一 第一部分 全局块 二 第二部分 events块 三 第三部分 http块 1 http全局块 2 server块 3 location块 三 nginx配置反向代理 一
  • Qt的Graphics-View框架和OpenGL结合详解

    Qt的Graphics View框架和OpenGL结合详解 演示程序下载地址 这里 程序源代码下载地址 这里 这是一篇纯技术文 介绍了这一个月来我抽时间研究的成果 Qt中有一个非常炫的例子 Boxes 它展示了Qt能够让其Graphics
  • 微信小程序如何用setData修改data中的数据

    wx request url url data classid classid header content type application json success function res console log res data 打
  • java输入输出方式

    oj public class Main public static void main String args 主代码 Scanner读入 import java util Scanner public class Main public
  • MySQL——流程控制函数

    在 MySQL 中 流程控制函数是指可以控制存储过程 stored procedure 或函数 function 中执行流程的语句 以下是几个常用的流程控制函数 1 IF函数 实现IF ELSE 的效果 如果expr1为true 则返回ex
  • arduino控制42步进电机——先动起来

    前言 好久之前就想分享出来 现在有点晚了 不过还是想简单的分享一下 在学校里一次做创新项目的机会 让我认识了步进电机 当时老师让我们用PLC发出脉冲的方式让步进电机动起来 可是我刚拿到步进电机时以为会像小马达一样 给正负直流电源就会跑 但是
  • c语言试卷自动批改系统.c

    一 题目要求 c语言试卷自动批改系统 1 answer txt为题目的答案文件 2 学生的答题信息用文件保存 即学号 txt 里面的内容为学生的答案 3 根据学号 txt与answer txt来判断学生答案是否正确来获取学生分数 每题五分
  • 火爆!用GPT接入midjounery绘图

    先看效果图吧 画了一只狗 gpt next web这个项目接入mj绘图 需要登录进入midjounery api网站后 复制一下api token key 3 网上找下GPT Next这个项目 建议电脑 手机有时候不显示图片 按照下方图示
  • 软件质量模型的六大特性和27个子特性

    软件质量模型的六大特性和27个子特性如下 ISO IEC9123软件质量特性 图示 一 功能性 1 适合性 解释软件产品是否提供了相应的功能 2 准确性 软件提供的功能是否正确 用户需要的 即解释软件对不对 3 互操作性 产品与产品之间交互
  • SQL优化(二):根据工具来SQL优化

    前一章节 讲的是explain的使用以及他结果的解析 实际上工具远远不止explain一个 还有慢查询 SHOW PROFILE这些 而且光读工具的说明书也不行 还要实际的根据工具返回的结果找到原因 根据实际情况是物理宿主机配置太低了要升级
  • Netty4详解三:Netty架构设计

    读完这一章 我们基本上可以了解到Netty所有重要的组件 对Netty有一个全面的认识 这对下一步深入学习Netty是十分重要的 而学完这一章 我们其实已经可以用Netty解决一些常规的问题了 一 先纵览一下Netty 看看Netty都有哪
  • 关于linux内核学习的误区以及相关书籍介绍

    第一篇 先说句正经的 其实我没资格写这篇文章 因为自己也就一两个月以来才开始有所领悟的 因此 这里与其说是关于linux内核学习的经验 不如说是自己的教训吧 希望不要扔鸡蛋砸我 常常有人问 我想学习内核 需要什么基础吗 linus torv