Linux内核编译详解_01

Linux 5.10 SPI-NAND 驱动移植实战:以 FM25S01A 为例,3步完成新Flash适配 本文详细解析了在Linux 5.10内核中移植SPI-NAND驱动的全流程,以FM25S01A为例,从驱动框架理解、芯片参数提取到驱动文件创建和内核集成,3步完成新Flash适配。重点介绍了如何从规格书中提取关键参数,并提供了设备树配置和内核编译的实用指南,帮助开发者高效完成SPI-NAND驱动移植。 阅读详情
Linux内核编译详解

#tar -zxvf linux-2.4.18.tar.gz.tar.gz 

#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用) 

#make dep
#make clean
#make bzImage或make zImage
#make modules
#make modules_install
#depmod -a



一、内核简介 
内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 
Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找到,大部分应用软件也都是遵循GPL而设计 的,你都可以获取相应的源程序代码。全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明显的好处就是Linux修补漏洞的 快速以及对最新软件技术的利用。而Linux的内核则是这些特点的最直接的代表。 
想象一下,拥有了内核的源程序对你来说意味着什么?首先,我们可以了解系统是如何工作的。通过通读源代码,我们就可以了解系统的工作原理,这在 Windows下简直是天方夜谭。其次,我们可以针对自己的情况,量体裁衣,定制适合自己的系统,这样就需要重新编译内核。在Windows下是什么情况 呢?相信很多人都被越来越庞大的Windows整得莫名其妙过。再次,我们可以对内核进行修改,以符合自己的需要。这意味着什么?没错,相当于自己开发了 一个操作系统,但是大部分的工作已经做好了,你所要做的就是要增加并实现自己需要的功能。在Windows下,除非你是微软的核心技术人员,否则就不用痴 心妄想了。 

二、内核版本号 

由于Linux的源程序是完全公开的,任何人只要遵循GPL,就可以对内核加以修改并发布给他人使用。Linux的开发采用的是集市模型(bazaar, 与cathedral--教堂模型--对应),为了确保这些无序的开发过程能够有序地进行,Linux采用了双树系统。一个树是稳定树(stable tree),另一个树是非稳定树(unstable tree)或者开发树(development tree)。一些新特性、实验性改进等都将首先在开发树中进行。如果在开发树中所做的改进也可以应用于稳定树,那么在开发树中经过测试以后,在稳定树中将 进行相同的改进。一旦开发树经过了足够的发展,开发树就会成为新的稳定树。开发数就体现在源程序的版本号中;源程序版本号的形式为x.y.z:对于稳定树 来说,y是偶数;对于开发树来说,y比相应的稳定树大一(因此,是奇数)。到目前为止,稳定树的最高版本是2.4.18;开发树的最新版本是 2.5.10。下载内核版本请访问 http://www.kernel.org。  

三、为什么重新编译内核 

Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。 
通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、 更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。 
为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑: 
l 自己定制编译的内核运行更快(具有更少的代码) 
l 系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中) 
l 不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞 
l 将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些 

四、内核编译模式 

要增加对某部分功能的支持,比如网络之类,可以把相应部分编译到内核中(build-in),也可以把该部分编译成模块(module),动态调用。如果 编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,你就可以使用这部分功能了;缺点是会使内核变得庞大起 来,不管你是否需要这部分功能,它都会存在,这就是Windows惯用的招数,建议经常使用的部分直接编译到内核中,比如网卡。如果编译成模块,就会生成 对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块。 

五、新版本内核的获取和更新 

Linux内核版本发布的官方网站是 http://www.kernel.org。新版本的内核的发布有两种形式,一种是Full  Source版本,另外一种是patch文件,即补丁。完整的内核版本比较大,一般是tar.gz或者是.bz2文件,二者分别是使用gzip或者 bzip2进行压缩的文件,使用时需要解压缩。patch文件则比较小,一般只有几十K到几百K,但是patch文件是针对于特定的版本的,你需要找到自 己对应的版本才能使用。 
编译内核需要root权限,以下操作都假定你是root用户。请把你需要升级的内核拷贝到/usr/src/下(下文中以2.4.18的内核的linux-2.4.18.tar.gz为例),命令为 

#cp linux-2.4.18.tar.gz /usr/src 

让我们先来查看一下当前/usr/src的内容,注意到有一个linux-2.4的符号链接,指向一个linux-2.4.7-10(以REDHAT7.2为例)的目录。这就是你所装linux的kernel源代码,删除这个链接。 

现在解压我们下载的源程序文件。如果所下载的是.tar.gz(.tgz)文件,请使用下面的命令: 

#tar -zxvf linux-2.4.18.tar.gz.tar.gz 

如果你所下载的是.bz2文件,例如linux-2.4.0test8.tar.bz2,请使用下面的命令 

#bzip2 -d linux-2.4.18.tar.bz2 
#tar -xvf linux-2.4.18.tar 

文件将解压到/usr/src/linux目录中,我们把它稍作修改: 

#mv linux linux-2.4.18 
#ln -s linux-2.4.18 linux 

如果下载的是patch文件,就可以进行patch操作(下面假设patch-2.4.18已经位于/usr/src目录下了,否则你需要先把该文件拷贝到/usr/src下): 

#patch -p0 < patch-2.4.18 


六、内核编译 

通常要运行的第一个命令是: 

#cd /usr/src/linux 
#make mrproper 

该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。由于我们使用刚下载的完整的源程序包进行编译,所以本步可以省略。而如果你多次使用了这些源程序编译内核,那么最好要先运行一下这个命令。 
确保/usr/include/目录下的asm、linux和scsi等链接是指向要升级的内核源代码的。它们分别链向源代码目录下的真正的、该计算机体 系结构(对于PC机来说,使用的体系结构是i386)所需要的真正的include子目录。如:asm指向/usr/src/linux/include /asm-i386等。若没有这些链接,就需要手工创建,按照下面的步骤进行: 

# cd /usr/include/ 
# rm -r asm linux scsi 
# ln -s /usr/src/linux/include/asm-i386 asm 
# ln -s /usr/src/linux/include/linux linux 
# ln -s /usr/src/linux/include/scsi scsi 

这是配置非常重要的一部分。删除掉/usr/include下的asm、linux和scsi链接后,再创建新的链接指向新内核源代码目录下的同名的目 录。这些头文件目录包含着保证内核在系统上正确编译所需要的重要的头文件。现在你应该明白为什么我们上面又在/usr/src下"多余"地创建了个名为 linux的链接了吧? 

接下来的内核配置过程比较烦琐,但是配置的适当与否与日后Linux的运行直接相关,有必要了解一下一些主要的且经常用到的选项的设置。 

配置内核可以根据需要与爱好使用下面命令中的一个: 

#make config(基于文本的最为传统的配置界面,不推荐使用) 
#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用) 
#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用) 
#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦) 

这三个命令中,make xconfig的界面最为友好,如果你可以使用Xwindow,那么就推荐你使用这个命令,界面如下: 

如果你不能使用Xwindow,那么就使用make menuconfig好了。界面虽然比上面一个差点,总比make config的要好多了,下图为make menuconfig的界面: 


选择相应的配置时,有三种选择,它们分别代表的含义如下: 
Y--将该功能编译进内核 
N--不将该功能编译进内核 
M--将该功能编译成可以在需要时动态插入到内核中的模块 
如果使用的是make xconfig,使用鼠标就可以选择对应的选项。如果使用的是make menuconfig,则需要使用空格键进行选取。你会发现在每一个选项前都有个括号, 但有的是中括号有的是尖括号,还有一种圆括号。 用空格键选择时可以发现,中括号里要么是空,要么是"*",而尖括号里可以是空,"*"和"M"这表示前者对应的项要么不要,要么编译到内核里;后者则多 一样选择,可以编译成模块。而圆括号的内容是要你在所提供的几个选项中选择一项。 
在编译内核的过程中,最烦杂的事情就是这步配置工作了,很多新手都不清楚到底该如何选取这些选项。实际上在配置时,大部分选项可以使用其缺省值,只有小部 分需要根据用户不同的需要选择。选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消 耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。 

至于选项,因为比较复杂,只是简单做一介绍,编译时应视具体情况,参考帮助的内容再加以选择。 

1. Code maturity level options 
代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。 

2. Loadable module support 
对模块的支持。这里面有三项: 

Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。 
Set version inFORMation on all module symbols:可以不选它。 
Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。 

3. Processor type and features 
CPU类型。内容蛮多的,不一一介绍了,有关的几个如下: 

Processor family:根据你自己的情况选择CPU类型。 
High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。 
Math emulation:协处理器仿真。协处理器是在386时代的宠儿,现在早已不用了。 
MTTR support:MTTR支持。可不选。 
Symmetric multi-processing support:对称多处理支持。除非你富到有多个CPU,否则就不用选了。 

4. General setup 
这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项: 

Networking support:网络支持。必须,没有网卡也建议你选上。 
PCI support:PCI支持。如果使用了PCI的卡,当然必选。 
PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。 
Support for hot-pluggabel devices:热插拔设备支持。支持的不是太好,可不选。 
PCMCIA/CardBus support:PCMCIA/CardBus支持。有PCMCIA就必选了。 
System V IPC 
BSD Process Accounting 
Sysctl support:以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。如果你不是使用BSD,就按照缺省吧。 
Power Management support:电源管理支持。 
Advanced Power Management BIOS support:高级电源管理BIOS支持。 

5. Memory Technology Device(MTD) 
MTD设备支持。可不选。 

6. Parallel port support 
并口支持。如果不打算使用串口,就别选了。 

7. Plug and Play configuration 
即插即用支持。虽然Linux对即插即用目前支持的不如Windows好,但是还是选上吧,这样你可以拔下鼠标之类的体验一下Linux下即插即用的感觉。 

8. Block devices 
块设备支持。这个就得针对自己的情况来选了,简单说明一下吧: 

Normal PC floppy disk support:普通PC软盘支持。这个应该必选。 
XT hard disk support: 
Compaq SMART2 support: 
Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。 
Loopback device support: 
Network block device support:网络块设备支持。如果想访问网上邻居的东西,就选上。 
Logical volume manager(LVM)support:逻辑卷管理支持。 
Multiple devices driver support:多设备驱动支持。 
RAM disk support:RAM盘支持。 

9. Networking options 
网络选项。这里配置的是网络协议。内容太多了,不一一介绍了,自己看吧,如果你对网络协议有所了解的话,应该可以看懂的。如果懒得看,使用缺省选项(肯定 要选中TCP/IP networking哦)就可以了。让我们看看,TCP/IP、ATM、IPX、DECnet、Appletalk……支持的协议好多哦,IPv6也支持 了,Qos and/or fair queueing(服务质量公平调度)也支持了,还有kHTTPd,不过这些都还在实验阶段。 

10. Telephony Support 
电话支持。Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务了。记住,电话卡可和modem没有任何关系哦。 

11. ATA/IDE/MFM/RLL support 
这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面自己找相应的选项吧。 

12. SCSI support 
SCSI设备的支持。我没有SCSI的设备,所以根本就不用选,如果你用了SCSI的硬盘/光驱/磁带等设备,自己找好了。 

13. Fusion MPT device support 
需要Fusion MPT兼容PCI适配器,不用选。 

14. I2O device support 
需要I2O接口适配器支持,在智能Input/Output(I2O)体系接口中使用。 

15. Network device support 
网络设备支持。上面选好协议了,现在该选设备了,可想而知,内容肯定多得很。还好还好,里面大概分类了,有ARCnet设备、Ethernet(10 or 100 Mbit)、Ethernet(1000Mbit)、Wireless LAN(non-hamradio)、Token Ring device、Wan interfaces、PCMCIA network device support几大类。我用的是10/100M的以太网,看来只需要选则这个了。还是10/100M的以太网设备熟悉,内容虽然多,一眼就可以看到我所用 的RealTeck RTL-8139 PCI Fast Ethernet Adapter support,为了免得麻烦,编译到内核里面好了,不选M了,选Y。耐心点,一般说来你都能找到自己用的网卡。如果没有,你只好自己到厂商那里去要驱动 了。 

16. Amateur Radio support 
配置业余无线广播。 

17. IrDA(infrared)support 
红外线支持。 

18. ISDN subsystem 
如果你使用ISDN上网,这个就必不可少了。 

19. Old CD-ROM drivers(not SCSI、not IDE) 
做的可真周到,原来那些非SCSI/IDE口的光驱谁还在用啊,自己选吧,用IDE的CD-ROM不用选。 

20. Character devices 
字符设备。这个内容又太多了,先使用缺省设置,需要的话自己就修改。把大类介绍一下吧: 

I2C support:I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。如果你要选择下面的Video For Linux,该项必选。 
Mice:鼠标。现在可以支持总线、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad,自己根据需要选择。 
Joysticks:手柄。即使在Linux下把手柄驱动起来意义也不是太大,游戏太少了。 
Watchdog Cards:虽然称为Cards,这个可以用纯软件来实现,当然也有硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为watchdog的 文件,它可以记录你的系统的运行情况,一直到系统重新启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。 
Video For Linux:支持有关的音频/视频卡。 
Ftape, the floppy tape device driver: 
PCMCIA character device support: 

21. File systems 
文件系统。内容又太多了,老法子,在缺省选项的基础上进行修改。介绍以下几项: 

Quota support:Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。 
DOS FAT fs support:DOS FAT文件格式的支持,可以支持FAT16、FAT32。 
ISO 9660 CD-ROM file system support:光盘使用的就是ISO 9660的文件格式。 
NTFS file system support:ntfs是NT使用的文件格式。 
/proc file system support:/proc文件系统是Linux提供给用户和系统进行交互的通道,建议选上,否则有些功能没法正确执行。 

还有另外三个大类都规到这儿了:Network File Systems(网络文件系统)、Partition Types(分区类型)、Native Language Support(本地语言支持)。值得一提的是Network File Systems里面的两种:NFS和SMB分别是Linux和Windows相互以网络邻居的形式访问对方所使用的文件系统,根据需要加以选择。 

22. Console drivers 
控制台驱动。一般使用VGA text console就可以了,标准的80*25的文本控制台。 

23. Sound 
声卡驱动。如果你能在列表中找到声卡驱动那自然最好,否则就试试OSS了。 

24. USB supprot 
USB支持。很多USB设备,比如鼠标、调制解调器、打印机、扫描仪等,在Linux都可以得到支持,根据需要自行选择。 

25. Kernel hacking 
配置了这个,即使在系统崩溃时,你也可以进行一定的工作了。普通用户是用不着这个功能的。 

配置完后,存盘退出,当然你也可以把现在的配置文件保存起来,这样下次再配置的时候就省力气了。 

接下来是编译,输入以下命令。 

#make dep 
#make clean 
#make bzImage或make zImage 
#make modules 
#make modules_install 
#depmod -a 

第一个命令make dep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要;第二命令make clean完成删除前面步骤留下的文件,以避免出现一些错误;make zImage和make bzImage则实现完全编译内核,二者生成的内核都是使用gzip压缩的,只要使用一个就够了,它们的区别在于使用make bzImage可以生成大一点的内核。建议大家使用make bzImage命令。 
后面三个命令只有在你进行配置的过程中,在回答Enable loadable module support (CONFIG_MODULES)时选了"Yes"才是必要的,make modules和make modules_install分别生成相应的模块和把模块拷贝到需要的目录中。 
严格说来,depmod -a命令和编译过程并没有关系,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。 

更新 

经过以上的步骤,我们终于得到了新版本的内核。为了能够使用新版本的内核,我们还需要做一些改动: 

#cp /usr/src/linux/System.map /boot/System.map-2.4.18 
#cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.18 

以上这两个文件是我们刚才编译时新生成的。下面修改/boot下的两个链接System.map和vmlinuz,使其指向新内核的文件: 

#cd /boot;rm -f System.map vmlinuz 
#ln -s vmlinuz-2.4.18 vmlinuz 
#ln -s System.map-2.4.18 System.map 

七、修改启动管理器 

如果用LILO,修改/etc/lilo.conf,添加以下项: 

image=/boot/vmlinuz-2.4.18 
label=linux240 
read-only 
root=/dev/hda2 

其中root=/dev/hda2一行要根据需要自行加以修改。 
运行: 

#/sbin/lilo -v 

确认对/etc/lilo.conf的编辑无误,现在重新启动系统: 

#shutdown -r now 

如果是用Grub启动管理器,则添加如下几项即可。 

title Red Hat Linux (2.4.18) 
root (hd0,0) 
kernel /vmlinuz-2.4.18 ro root=/dev/hda2 

Grub不需再次调用命令,自动生效。 

重启以后就可以用新内核了。
详解将驱动程序编译进linux内核 1、进入目录linux-kernel-samsung-dev\drivers\char 2、新建目标目录01.led,将驱动相关文件复制到此目录    注:需确保复制的驱动文件是能正常运行的驱动 3、在目录01.led里编写Kconfig文件 menu "xxx" config XXX_LED         tristate "xxx_ggg210_led"       阅读详情

相关推荐

Linux内核编译方法

安装Linux内核源码 打开Ubuntu,执行如下命令创建Linux内核源码安装目录“/home/tronlong/AM57xx/kernel/Linux-4.4.19”,如下图所示: Host# mkdir -p /home/tronlong/AM57xx/kernel/Linux-4.4.19 Linux内核源码为光盘“Linux\kernel\Linux-4.4.19\src\linux-...

fdffvggg的博客 901

Vuex的store中的Module

Vuex的store中的Module 1.单一状态树: 什么是单一状态树呢?单一状态树可以简单得理解成整个vuex中只有一个store对象。 这是官方对单一状态树的解释: Vuex 使用单一状态树——是的,用一个对象就包含了全部的应用层级状态。至此它便作为一个“唯一数据源 (SSOT (opens new window))”而存在。这也意味着,每个应用将仅仅包含一个 store 实例。单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。 但是当我们全部状

qq_43203949的博客 8722

Linux 内核学习1. 编译并启动一个最小化系统

Linux内核是操作系统的核心组件,负责管理硬件资源、提供系统调用接口以及协调用户空间和硬件之间的交互。内核位于操作系统的最底层,直接与硬件交互,为上层提供服务。Linux内核是开放源代码的,符合 GPL (General Public Licese)开源协议。内核网址:https://kernel.org/截止本文写作时,当前内核主线最新版本是6.8-rc1。

猿来这样-谢厂节的博客 2269

SELinux refpolicy详解(4)

SELinux refpolicy详解(4)

phmatthaus的专栏 1659

WSL2 编译安装Linux内核模块

WSL2 编译安装Linux内核模块

一些C++相关的技术笔记或者教程. 2429

移远EC21/EC200模组休眠功耗从13mA降到6mA,我排查了这3个坑(附完整AT指令流程)

本文详细介绍了移远EC21/EC200模组休眠功耗从13mA优化至6mA的完整解决方案,涵盖硬件设计检查、AT指令配置、RTOS调度优化和固件兼容性验证等关键步骤。通过系统性的低功耗问题诊断框架,帮助IoT设备开发者有效提升电池续航能力,特别适合智能水表等电池供电场景应用。

weixin_30715523的博客 534

vuex Module将 store 分割成模块

由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割: const moduleA = { state: () => ({ ... }), mutations: { ... }, actions: { ... },

caoxinjian423的博客 547

深度学习十大算法之Word2Vec

Word2Vec的提出,标志着词嵌入技术的一次重大进步。Word2Vec是一种高效的词嵌入模型,由Google的研究团队于2013年开发。它使用一种称为神经网络的机器学习方法,通过学习大量文本数据,生成能够表达词语间丰富语义关系的词向量。Word2Vec的核心优势在于它能够捕捉到词语之间的细微关系。例如,在Word2Vec模型中,可以通过计算向量之间的距离来估计词语之间的相似度。这不仅能帮助理解语言的复杂性,还可以应用于各种NLP任务,如机器翻译和搜索引擎优化。

第欧根尼的酒桶的博客 1864

Vuex 4源码学习笔记 - Store 构造函数都干了什么(四)

在上一篇笔记中:Vuex 4源码学习笔记 - Vuex是怎么与Vue结合?(三) 我们复习了Vuex的使用方式,以及为什么要使用Vuex,同时看到了Vuex是如何与Vue去结合到一起的。 Vuex是通过Vue插件的方式,通过use函数将Vuex实例对象绑定到Vue中。 然后我们在页面或者组件中可以通过useStore函数或者this.$store两种方式在页面中访问到store实例。 首先创建Vuex实例的方式为调用createStore函数来调用 import { createStore } from '

小帅的编程笔记 1025

帆软js--获取控件和单元格

参数面板: 获取面板控件 ,name为控件名称:_g().parameterEl.getWidgetByName("name") 取值:_g().parameterEl.getWidgetByName("tt3").getValue()2323 赋值:_g().parameterEl.getWidgetByName("tt2").setValue("987") 调用对应的事件比...

江湖行骗老中医 7197

YOLOv8集成EMA注意力机制YOLOv8完整教程 将EMA注意力机制集成到YOLOv8框架中

YOLOv8教程这篇文章介绍了如何将EMA(高效多尺度注意力)机制集成到YOLOv8目标检测框架中。YOLOv8 EMA注意力机制通过多尺度特征融合和高效计算,能够提升模型对关键特征的关注能力。文章详细解析了EMA的原理和结构设计,包括其核心组件和前向传播过程。此外,提供了完整的实现指南,包括环境准备、项目结构设置、EMA模块代码实现(包含分组处理、空间注意力计算和特征融合等关键步骤)。YOLOv8 YOLOv8 YOLOv8 YOLOv8 YOLOv8

FJN110的博客 925

修改wifi direct/ hotspot/ Bluetooth默认名称

1. wifi direct or wifi p2p 默认名称为Android_XXXX. frameworks/opt/net/wifi/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java private String getPersistedDeviceName() { ...

Saimon的博客 2210

企业级OpenClaw部署实战:10个关键配置让你从“养虾“到“精通“

OpenClaw(社区昵称"小龙虾")作为2026年开源社区最活跃的AI Agent项目,凭借其多Agent协同架构和企业级安全隔离能力,已成为中大型企业的首选AI基础设施。本文基于真实企业部署经验,系统梳理了企业级OpenClaw部署的10个关键配置:用户ID消息隔离、群组ID消息隔离、多机器人配置、无限量Agent创建、机器人与Agent关联、Agent间调度、权限配置、Hooks任务、多模型切换及一键备份迁移。

program哲学 930

Linux内核开发_1_编译LInux内核

1. 准备工作 1.1 学习环境 本系列教程使用的环境如下: 操作系统版本: Linux ubuntu 18.04 Linux内核版本: cat /proc/version Linux version 4.15.0-20-generic (buildd@lgw01-amd64-039)\ (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 ...

17岁boy的博客 9181

深度强化学习 | 基于SAC算法的动态避障(ROS C++仿真)

本文介绍了基于SAC(软性演员-评论家)算法的机器人运动规划方法,通过PyTorch框架实现了端到端训练,并部署到Python和ROS C++中。实验结果显示,基于SAC算法的智能体在动态避障任务中表现良好,能实现从起点到终点的无碰撞导航。

FRIGIDWINTER的博客 8209

地平线J6的基础简介

地平线J6M芯片:面向中阶辅助驾驶市场的高性价比芯片

weixin_43084908的博客 4449

Linux 内核编译详解

 新内核可以在http://www.kernel.org下载。先把linux-2.6.18.2.tar.bz2 复制到/usr/src/ 的下面tar –jxvf  linux-2.6.18.2.tar.bz2cd linux-2.6.18.2 make mrproper 把原来编译产生的垃圾删除 配置内核可以根据需要与爱好使用下面命令中的一个:#make co

~ 悠悠风信子 ~ 3万+

【深度学习新浪潮】Qwen门控注意力斩获NeurIPS 2025最佳论文!技术解析与代码实现

Qwen团队的门控注意力机制获得NeurIPS 2025最佳论文,不仅是中国AI研究的重大突破,更是大模型架构创新的重要里程碑。这项研究证明,通过巧妙的架构设计,可以在不显著增加计算成本的前提下,大幅提升模型性能。正如论文所展示的,用一个极其简单的改动,同时解决了Transformer架构中的多个核心问题,这正是优秀研究的价值所在。该技术已成功应用于Qwen3大模型,为通义千问系列产品的性能提升提供了坚实的技术支撑。轻量化大模型设计多模态统一架构专用领域大模型优化边缘计算场景部署。

专注:太空算力、AI infra、异构调度、大模型成本工程 569

Linux内核开发——编译Ubuntu 20.04内核代码

可以使用下列可以直接下载一个比当前内核版本新的代码,也可以去https://mirrors.edge.kernel.org/pub/linux/kernel下载自己内核使用的版本。此文下载的是更新的版本 5.17.15,去官网https://www.kernel.org/,下载linux-5.17.12.tar.xz。不同版本的Ubuntu,需要对应不同版本的源。可以通过。https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/上可以选择不同版本的Ubuntu对应的源

飞鹤的程序员人生 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【Linux内核调试环境搭建01】内核编译

上述编译内核使用的默认配置为vexpress_defconfig。

qq_38974298的博客 1403

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VirtualBox虚拟机安装RedHat7.3编译Linux0.01内核

引子 由于需要编译linux0.01内核,而目前的linux版本太高需要降低gcc版本等等,需要做不少调整非常不方便。 所以,直接安装RedHat7.3,这样就好编译linux0.01的内核了。 但是,安装RedHat7.3需要注意一些问题。 下载老版的RedHat RedHat7.3下载地址 http://ftp.heanet.ie/pub/redhat-archiv

编程的本质是数学问题 2505

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Linux 编译debug内核

0x01:下载内核源码 a.官方网站: https://www.kernel.org/ b.ftp服务器下载: http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/ 下载内核源码版本:5.3.1 0x02:编译带调试信息内核做 解压内核代码,我这里下载linux 内核压缩包为linux-5.3.1.tar.gz,解压方式tar -zxvf linux-5.3.1.tar.gz make menuconfig -> kernel d

qq_42931917的博客 7833

如何编译Linux内核源码?

前言 学习Linux内核是一件振奋人心的事情,而在学习伊始对Linux内核的成功编译并运行一个mini版的文件系统也更会燃起更足的动力去钻研。本文从下载并编译Linux内核、编译busybox、制作一个最小的根文件系统,最后用qemu启动你编译好的内核和根文件系统 ,初步感受Linux内核的魅力所在。 Linux用途广泛,包含的内容也琳琅满目。Linux系统的基础是内核、C库、工具集合系统的基本工具(如登录程序和Shell)。应用程序通过system call陷入内核,内核又通过驱动程序来与硬件交互。

量子象限 3773

Linux内核第一版 (v0.01) 开源代码解读,探索 Linux v0.01 的内部结构

它足够小,易于理解,是了解类 UNIX 操作系统内核内部结构的良好起点。是的,这确实是很好的代码。不幸的是(或者幸运的是),这个预言是错误的。如果所有可运行任务的计数器值为 0,它将更新每个任务的值并重新启动循环。这只是我的猜测,但我认为这是为了优先考虑很少可运行但对延迟敏感的任务,例如 shell,它在大部分时间里都会等待键盘输入。中的优化实现找到,但它不是在类似. 而且,无需切换不同架构的实现。(“扩展文件系统”)是 ext2/ext3/ext4 的前身,受到 MINIX 文件系统的启发。

共同学习、强我国家 3612

Linux嵌入式驱动开发02——驱动编译到内核

文章目录make menuconfig图形化配置界面1. 怎么进入到make menuconfig图形化界面?2. make menuconfig图形化界面的操作3. 退出4. 和make menuconfig有关的文件5. make menuconfig会读哪个目录下的Kconfig文件6. 为什么要复制成.config而不是其他文件7. 我们复制的这个默认的配置选项不符合我们的要求怎么办?8. 怎么和Makefile文件建立的关系驱动编译到内核 make menuconfig图形化配置界面 1. 怎么

“逛丢一只鞋”的博客 4349
上一篇: Linux系统上的Watchdog实现
下一篇: 编译Linux2.6内核_02
bamboolsu
博客等级 码龄22年 200粉丝 394原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值