kernels

/***************** RedHat企业版自从AS4开始,桌面版本自从FC3开始,不再单独提供kernel -sourcecode的rpm安装包,原因是RedHat认为没有必要维护单独的kernel-sourcecode包,因为所有的源代码包都应该包含 在.src.rpm中而不是rpm中。所以在这些高版本的RedHat Linux上,我们如果需要定制内核的话,没有直接的源代码rpm可以安装,只能通过kernel.org下载的tar.gz的包手工安装,或者通过 kernel-*.src.rpm编译出kernel-source包再来安装。后面一种方法可以享受到RedHat针对内核的某些参数和代码的优化,因 此对使用RedHat发行版特别是企业版本的,是有一定好处的。
    但是目前很多人至今分不清内核,内核开发,内核源代码一些包之间的关系,因此在编译内核的时候经常走弯路,同时RedHat官方对于如果得到kernel-source也没有明确的指示,导致很多人不得要领。

首先认清楚各rpm包的内容和用途
kernel-*.rpm -------------  内核二进制包,没有的话系统都起不来
kernel-sourcecode-*.rpm------------------- 内核源代码包,安装到/usr/src/linux-*下面的,包含内核源代码,编译内核必须(当然是不考虑用kernel.tar.gz编译的情况), 但高版本RedHat Linux不再提供此rpm,原因参见官方Release Note,这篇文章的最终目的就是要我们自己把这个包搞出来。
kernel-devel-*.rpm----------------内核开发包,安装到/usr/src/kernels,用于内核模块开发,组织形式跟内核源代码包类似,包含了部分内 核源代码。注意很多人误认为这个就是内核源代码包,直接拿它来编译内核,当然不可能成功。这个包只是用于内核模块一级开发,例如驱动程序等,虽然也可以 make menuconfig make dep等,但make bzImage是不可能成功的,因为缺失了核心源代码。
kernel-*.src.rpm---------------RedHat提供的用于建立rpm的源代码包,安装到/usr/src/redhat中,使用rpmbuild可以从这个包中build出上面所说的所有包。


现在就来从src.rpm编译出上面的所有的包,除了sourcecode这个包其他的包都可以在不用修改任何地方的情况下直接rpmbuild出来,唯 有sourcecode这个比较麻烦,一定要按照下面的步骤来做,我以RedHat AS4 所带的版本为例,其他版本相同。

#首先安装src.rpm
rpm -ivh kernel-2.6.9-5.EL.src.rpm
#进入相应目录,要修改spec文件
cd /usr/src/redhat/SPECS
vi kernel-2.6.spec
#主要修改如下地方:
    1,define buildsource 0------------我的这个在第8行,改为1,这就是为什么没有源代码包的原因,因为默认不生成源代码包
    2, Requires: qt-devel, gtk2-devel readline-devel ncurses-devel-------我的在572行,如果没用用X的话,把这句注释掉,这样编译出来的包就不依赖于X-window的某些包,因为 内核配置是可以make xconfig的,所以默认依赖X-window,我没装X-window,因此这个就去掉了。
#保存退出
touch /etc/beehive-root
#这句命令非必须,如果不做的话,最后编译出来的包都会变成kernel-*.*-root.rpm,多了个root,据说是为了标示包的编译人的,如果touch了这个文件,就没有这个问题了,命名和官方rpm一样。
rpmbuild  -ba --target=i686 ./kernel-2.6.spec
#编译i686平台的所有包,这样上面介绍的所有包都会生成,或者换成rpmbuild -bb --target=i686 ./kernel-2.6.spec只编译非src.rpm。
#所有包就会生成到/usr/src/redhat/RPMS/i686下面

#如果只需要sourcecode而并非所有rpm包,那在修改spec文件时还要修改如下行:

     48 %ifarch noarch
     49 %define builddoc 1
     50 %define buildsource 0----------------这里0修改为1
在编译的时候使用rpmbuild  -ba --target=noarch ./kernel-2.6.spec,这样仅仅编译soucecode和doc包,会节省很多时间。
/*****************
http://linux.chinaunix.net/bbs/viewthread.php?tid=862265&extra=page%3D2
http://bbs.bitscn.com/viewthread.php?tid=68287
http://www.bloghome.cn/posts/10729

 
### Kernels 的变化情况分析 Kernels 是指计算框架中的核心组件或模块,通常涉及底层优化、性能改进以及功能扩展等方面的内容。以下是关于 kernels 变化情况的具体说明: #### 性能评估与版本对比 在不同版本中,kernels 的性能可能因算法调整而有所差异。例如,在某些实验环境中观察到 Rotate 方法的总分维持在约 5.0 左右,这表明其表现较为稳定并受制于具体测试条件[^1]。 #### 多卡训练下的更新策略 当使用 deepspeed 进行多卡微调时,如果遇到错误提示,则可能是由于 `--output_dir` 路径冲突所致。解决方法之一是更改输出目录路径以避免覆盖已有文件[^2]。这种操作间接反映了 kernels 需要适应分布式环境的需求,并通过不断迭代来提升稳定性。 #### 架构搜索与优化方向 针对资源受限场景下的 tiny 模型设计,MCUNetV2 提出了基于进化搜索的方法寻找最优子网络结构。在此过程中涉及到 kernel 层面的设计决策: - 初始阶段随机生成满足约束条件的第一代种群; - 经过多轮筛选保留高精度个体并通过遗传机制创造后代群体; - 设置固定次数循环直至收敛得到最终方案[^3]。 以上流程体现了 kernels 开发遵循科学严谨的态度,从初始设定到最后定稿都经过精心规划与反复试验验证。 ```python # 示例代码展示如何实现简单版进化算法用于模拟kernel选优过程 import random def evolve_network(population_size, generations, mutation_rate): population = [] # 初始化种群 for _ in range(population_size): individual = {'accuracy':random.uniform(80,95)} population.append(individual) best_accuracy = max([ind['accuracy'] for ind in population]) for gen in range(generations): new_population = [] # 精英选择 top_candidates = sorted(population,key=lambda x:x['accuracy'],reverse=True)[:int(population_size*0.2)] new_population.extend(top_candidates) # 杂交繁殖 while len(new_population)<population_size//2: parent1,parent2=random.sample(top_candidates,k=2) child={'accuracy':(parent1['accuracy']+parent2['accuracy'])/2} new_population.append(child) # 基因突变 mutated_children=[{'accuracy':c['accuracy']*random.choice([-mutation_rate,+mutation_rate])}if random.random()<mutation_rate else c for c in new_population] new_population+=mutated_children current_best=max([ind['accuracy'] for ind in new_population]) if current_best>best_accuracy: best_accuracy=current_best return best_accuracy print(evolve_network(100,30,0.1)) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值