ubuntu编译内核模块(Ubuntu编译了新的内核,进入新内核时一直显示载入Linux 5.6.7,载入初始化内存盘咋回事)

2025-08-25 20:00:01 :0

ubuntu编译内核模块(Ubuntu编译了新的内核,进入新内核时一直显示载入Linux 5.6.7,载入初始化内存盘咋回事)

各位老铁们,大家好,今天由我来为大家分享ubuntu编译内核模块,以及Ubuntu编译了新的内核,进入新内核时一直显示载入Linux 5.6.7,载入初始化内存盘咋回事的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

本文目录

Ubuntu编译了新的内核,进入新内核时一直显示载入Linux 5.6.7,载入初始化内存盘咋回事

概述====1)当内核配置了内存盘时, 内核在初始化时可以将软盘加载到内存盘中作为根盘.当同时配置了初始化内存盘(Initail RAM Disk)时, 内核在初始化时可以在安装主盘之前,通过引导程序所加载的initrd文件建立一个内存初始化盘, 首先将它安装成根文件系统, 然后执行其根目录下的linuxrc 文件,可用于在安装主盘之前加载一些内核模块. 等到linuxrc 程序退出后, 再将主盘安装成根文件系统,并将内存初始化盘转移安装到其/initrd目录下.2)当主盘就是initrd所生成的内存初始化盘时, 不再进行重新安装,在DOS下用loadlin加载的抢救盘就是这种工作方式.3)引导程序所加载的initrd为文件系统的映象文件, 可以是gzip压缩的, 也可以是不压缩的.能够识别的文件系统有minix,ext2,romfs三种.4)当内核的根盘为软盘时,内核初始化时会测试软盘的指定部位是否存在文件系统或压缩文件映象, 然后将之加载或解压到内存盘中作为根盘. 这是单张抢救软盘的工作方式.有关代码========; init/main.c#ifdef CONFIG_BLK_DEV_INITRDkdev_t real_root_dev; 启动参数所设定的根盘设备#endifasmlinkage void __init start_kernel(void){ char * command_line; unsigned long mempages; extern char saved_command_line; int path_start = -1;#ifdef CONFIG_BLK_DEV_FD if (MAJOR(ROOT_DEV) == FLOPPY_MAJOR) { 当根盘还是软盘,表示没有加载过内存盘#ifdef CONFIG_BLK_DEV_RAM extern int rd_doload; extern void rd_load_secondary(void);#endif floppy_eject();#ifndef CONFIG_BLK_DEV_RAM printk(KERN_NOTICE "(Warning, this kernel has no ramdisk support)/n");#else /* rd_doload is 2 for a dual initrd/ramload setup */ ; 只有当加载了initrd但没有释放到内存盘中(mount_inird=0)才有可能到这一步 if(rd_doload==2) rd_load_secondary(); 加载另一张软盘到1号内存盘作为根盘 else#endif { printk(KERN_NOTICE "VFS: Insert root floppy and press ENTER/n"); wait_for_keypress(); } }#endif devfs_make_root (root_device_name); handle = devfs_find_handle (NULL, ROOT_DEVICE_NAME, MAJOR (ROOT_DEV), MINOR (ROOT_DEV), DEVFS_SPECIAL_BLK, 1); if (handle) /* Sigh: bd*() functions only paper over the cracks */ { unsigned major, minor; devfs_get_maj_min (handle, &major, &minor); ROOT_DEV = MKDEV (major, minor); } /* * Probably pure paranoia, but I’m less than happy about delving into * devfs crap and checking it right now. Later. */ if (!ROOT_DEV) panic("I have no root and I want to scream"); bdev = bdget(kdev_t_to_nr(ROOT_DEV)); if (!bdev) panic(__FUNCTION__ ": unable to allocate root device"); bdev-》bd_op = devfs_get_ops (handle); path_start = devfs_generate_path (handle, path + 5, sizeof (path) - 5); mode = FMODE_READ; if (!(root_mountflags & MS_RDONLY)) mode |= FMODE_WRITE; retval = blkdev_get(bdev, mode, 0, BDEV_FS); if (retval == -EROFS) { root_mountflags |= MS_RDONLY; retval = blkdev_get(bdev, FMODE_READ, 0, BDEV_FS); } if (retval) { /* * Allow the user to distinguish between failed open * and bad superblock on root device. */ printk ("VFS: Cannot open root device /"%s/" or %s/n", root_device_name, kdevname (ROOT_DEV)); printk ("Please append a correct /"root=/" boot option/n"); panic("VFS: Unable to mount root fs on %s", kdevname(ROOT_DEV)); } check_disk_change(ROOT_DEV); sb = get_super(ROOT_DEV); 取根盘的超级块 if (sb) { fs_type = sb-》s_type; goto mount_it; } read_lock(&file_systems_lock); for (fs_type = file_systems ; fs_type ; fs_type = fs_type-》next) { if (!(fs_type-》fs_flags & FS_REQUIRES_DEV)) continue; 根文件系统必须依赖于块设备 if (!try_inc_mod_count(fs_type-》owner)) continue; 当文件系统模块正在删除过程中 read_unlock(&file_systems_lock); sb = read_super(ROOT_DEV,bdev,fs_type,root_mountflags,NULL,1);建立根盘的超级块结构 if (sb) goto mount_it; read_lock(&file_systems_lock); put_filesystem(fs_type); 释放对文件系统模块的引用 } read_unlock(&file_systems_lock); panic("VFS: Unable to mount root fs on %s", kdevname(ROOT_DEV));mount_it: printk ("VFS: Mounted root (%s filesystem)%s./n", fs_type-》name, (sb-》s_flags & MS_RDONLY) ? " readonly" : ""); if (path_start 》= 0) { devfs_mk_symlink (NULL, "root", DEVFS_FL_DEFAULT, path + 5 + path_start, NULL, NULL); memcpy (path + path_start, "/dev/", 5); vfsmnt = add_vfsmnt(NULL, sb-》s_root, path + path_start); } else vfsmnt = add_vfsmnt(NULL, sb-》s_root, "/dev/root"); 建立根盘的安装结构 /* FIXME: if something will try to umount us right now... */ if (vfsmnt) { set_fs_root(current-》fs, vfsmnt, sb-》s_root); 设置当前进程的根盘和根目录 set_fs_pwd(current-》fs, vfsmnt, sb-》s_root); 设置当前进程的当前盘和当前目录 if (bdev) bdput(bdev); /* sb holds a reference */ return; } panic("VFS: add_vfsmnt failed for root fs");}#ifdef CONFIG_BLK_DEV_INITRDint __init change_root(kdev_t new_root_dev,const char *put_old){ 以new_root_dev作为根盘重新安装根文件系统,原来的根转移到put_old目录下 struct vfsmount *old_rootmnt; struct nameidata devfs_nd, nd; int error = 0; read_lock(¤t-》fs-》lock); old_rootmnt = mntget(current-》fs-》rootmnt); 取当前进程的根盘安装结构 read_unlock(¤t-》fs-》lock); /* First unmount devfs if mounted */ if (path_init("/dev", LOOKUP_FOLLOW|LOOKUP_POSITIVE, &devfs_nd)) error = path_walk("/dev", &devfs_nd); if (!error) { if (devfs_nd.mnt-》mnt_sb-》s_magic == DEVFS_SUPER_MAGIC && devfs_nd.dentry == devfs_nd.mnt-》mnt_root) { dput(devfs_nd.dentry); down(&mount_sem); /* puts devfs_nd.mnt */ do_umount(devfs_nd.mnt, 0, 0); up(&mount_sem); } else path_release(&devfs_nd); } ROOT_DEV = new_root_dev; mount_root(); 改变根盘设备重新安装根文件系统#if 1 shrink_dcache(); 清除目录项缓冲中所有自由的目录项 printk("change_root: old root has d_count=%d/n", atomic_read(&old_rootmnt-》mnt_root-》d_count));#endif mount_devfs_fs (); /* * Get the new mount directory */ error = 0; if (path_init(put_old, LOOKUP_FOLLOW|LOOKUP_POSITIVE|LOOKUP_DIRECTORY, &nd)) error = path_walk(put_old, &nd); 在新的根盘中寻找put_old目录 if (error) { int blivet; printk(KERN_NOTICE "Trying to unmount old root ... "); blivet = do_umount(old_rootmnt, 1, 0); 卸载原始的根盘 if (!blivet) { printk("okay/n"); return 0; } printk(KERN_ERR "error %d/n", blivet); return error; } /* FIXME: we should hold i_zombie on nd.dentry */ move_vfsmnt(old_rootmnt, nd.dentry, nd.mnt, "/dev/root.old"); mntput(old_rootmnt); path_release(&nd); return 0;}#endifstatic struct vfsmount *add_vfsmnt(struct nameidata *nd, 在虚拟文件系统中的安装点 struct dentry *root, 安装盘的根目录项 const char *dev_name) 安装盘名称{ struct vfsmount *mnt;
————————————————
版权声明:本文为CSDN博主「huanghaibin」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
***隐藏网址***

ubuntu内核编译需要多长时间

在分析linux内核源码的过程中,要是能够修改内核源码并运行修改后的内核,我想肯定是令人高兴的事,哪怕第一次修改仅仅是在启动时打印一行"Hello, Wang Jiankun!",肯定也是令我高兴的。为了能成功编译修改后的内核,今天先编译一遍内核。
为了有一个完整的记录,今天的起点是一台裸机。
1、在裸机上安装一个最小的debian系统
为了能够尽可能清晰的显示编译一个内核所需要的组件,在安装系统时,仅仅安装最小系统,然后需要什么,就使用apt-get安装什么。
使用网络安装,在安装过程中出现Software selection界面时不要选择任何选项,这样安装的系统将是最小的系统。
为了使用ssh远程登录,最小系统安装完成后,要安装ssh服务器并且要设置静态ip地址(debian安装过程中是通过dhcp获取的ip地址)。
2、安装ssh服务器
apt-get install ssh
3、设置静态ip地址
修改文件/etc/network/interfaces,其中蓝色部分是增加的,红色部分是屏蔽掉的,黑色部分是没有变化的。
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
# Wang Jiankun commented the following line
#iface eth0 inet dhcp
# Wang Jiankun added the the following lines
iface eth0 inet static
address 192.168.1.251
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0
gateway 192.168.1.1
重启系统后,修改将生效。
4、通过wget下载linux内核源码
***隐藏网址***
5、解压文件linux-2.6.19.tar.bz2
administrator@wangjk:~/kernel$ tar jxf linux-2.6.19.tar.bz2
tar: bzip2: Cannot exec: No such file or directory
tar: Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error exit delayed from previous errors
administrator@wangjk:~/kernel$
看来是没有bzip2这个包,那就安装一个:
apt-get install bzip2
6、安装debian的kernel-package软件包
在安装kernel-package软件包时,最好使用命令:apt-get build-dep kernel-package,而不要使用命令:
apt-get install kernel-package,后者安装的软件包是前者的子集,使用后者安装kernel-package软件包后,执行make menuconfig命令会出现头文件找不到的错误,如下所示:
administrator@wangjk:~/kernel/linux-2.6.19$ make menuconfig
HOSTCC scripts/basic/fixdep
scripts/basic/fixdep.c:105:23: error: sys/types.h: No such file or directory
scripts/basic/fixdep.c:106:22: error: sys/stat.h: No such file or directory
scripts/basic/fixdep.c:107:22: error: sys/mman.h: No such file or directory
scripts/basic/fixdep.c:108:20: error: unistd.h: No such file or directory
scripts/basic/fixdep.c:109:19: error: fcntl.h: No such file or directory
scripts/basic/fixdep.c:110:20: error: string.h: No such file or directory
scripts/basic/fixdep.c:111:20: error: stdlib.h: No such file or directory
scripts/basic/fixdep.c:112:19: error: stdio.h: No such file or directory
主要是因为libc6-dev软件包没有安装。所以即使使用了apt-get install kernel-package还得使用apt-get build-dep kernel-package,不如一次使用apt-get build-dep kernel-package完成方便。
7、安装libncurses5-dev软件包来支持make menuconfig
通过apt-get build-dep kernel-package安装完成kernel-package后,执行make menuconfig仍然报错,如下所示:
administrator@wangjk:~/kernel/linux-2.6.19$ make menuconfig
HOSTCC scripts/kconfig/lxdialog/checklist.o
In file included from scripts/kconfig/lxdialog/checklist.c:24:
scripts/kconfig/lxdialog/dialog.h:32:20: error: curses.h: No such file or directory
In file included from scripts/kconfig/lxdialog/checklist.c:24:
scripts/kconfig/lxdialog/dialog.h:97: error: expected specifier-qualifier-list before ’chtype’
scripts/kconfig/lxdialog/dialog.h:187: error: expected ’)’ before ’*’ token
scripts/kconfig/lxdialog/dialog.h:193: error: expected ’)’ before ’*’ token
scripts/kconfig/lxdialog/dialog.h:195: error: expected ’)’ before ’*’ token
scripts/kconfig/lxdialog/dialog.h:196: error: expected ’)’ before ’*’ token
scripts/kconfig/lxdialog/dialog.h:197: error: expected ’)’ before ’*’ token
scripts/kconfig/lxdialog/dialog.h:198: error: expected ’)’ before ’*’ token
scripts/kconfig/lxdialog/dialog.h:200: error: expected ’)’ before ’*’ token
scripts/kconfig/lxdialog/checklist.c:31: error: expected ’)’ before ’*’ token
scripts/kconfig/lxdialog/checklist.c:59: error: expected ’)’ before ’*’ token
scripts/kconfig/lxdialog/checklist.c:95: error: expected ’)’ before ’*’ token
原来是最小系统不支持图形的原因,安装libncurses5-dev后即可。
8、将系统的config文件拷贝到内核目录下
cp /boot/config-2.6.18-6-686 ./.config
9、执行make menuconfig
虽然是将原来系统的config文件拷贝过来的,但是如果所以的配置都采用默认的配置仍然会有问题,在我的系统上在加载文件系统时会死掉,所以还是要做必要的配置,主要是将scsi和sata部分编译进内核而不要编译成模块,如下所示:
Device Drivers ---》
Serial ATA (prod) and Parallel ATA (experimental) drivers ---》
SCSI device support ---》
将蓝色两部分级联的选项全部编译进内核(其实没有必要全部,但为了简单起见,暂时这样做)。
10、安装fakeroot软件包
11、编译内核
fakeroot make-kpkg --initrd --revision=custom.1.0 kernel_image
12、安装内核
wangjk:/home/administrator/kernel# dpkg -i linux-image-2.6.19_custom.1.0_i386.deb
Selecting previously deselected package linux-image-2.6.19.
(Reading database ... 17679 files and directories currently installed.)
Unpacking linux-image-2.6.19 (from linux-image-2.6.19_custom.1.0_i386.deb) ...
Done.
Setting up linux-image-2.6.19 (custom.1.0) ...
Running depmod.
Finding valid ramdisk creators.
Using mkinitramfs-kpkg to build the ramdisk.
Running postinst hook script /sbin/update-grub.
You shouldn’t call /sbin/update-grub. Please call /usr/sbin/update-grub instead!
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.19
Found kernel: /boot/vmlinuz-2.6.18-6-686
Updating /boot/grub/menu.lst ... done
13、重启系统引导新内核后查看版本号
administrator@wangjk:~$ cat /proc/version
Linux version 2.6.19 (root@wangjk) (gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)) #1 SMP Thu May 7 21:52:10 CST 2009
administrator@wangjk:~$
可以看出已经是我编译的内核了。

***隐藏网址***
------------------------------------
ubuntu不带linux内核源码,需要自己下载安装。
1,查看自己的内核版本
uname -r
2,查看源内的内核源码类表
apt-cache search linux-source
3,下载安装内核源代码
sudo apt-get install linux-source-2.6.27 //我选的是这一个,自己看着办吧
4,等待........

下载完成后,在/usr/src下会有一个文件名为linux-source-2.6.xx.tar.bz2的压缩包
5,解压缩包
tar jxvf linux-source-2.6.27.tar.bz2 //看清自己的版本

解压后会生成一个源代码目录/usr/src/linux-source-2.6.27
6,进入源码目录后,配置文件
make oldconfig
7,生成内核
make
8,疯狂等待,大约1个多小时

9,编译模块
make modules
10,安装模块
make modules_install
大功告成!^_^
下面说一下Makefile文件

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install #PWD当前工作目录的变量
obj-m := hello.o
#hello.o是你要生成的驱动,以后可以自己改
KERNELDIR:=/lib/modules/2.6.27-7-generic/build
#这里别抄,写成你自己的版本,这个目录执行了内核源码目录
PWD:=$(shell pwd) #将当前工作目录赋值该PWD
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
下面是一个经典的Hello,world!例子自己make一下就行了。
#include 《linux/init.h》
#include 《linux/module.h》
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world!\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT"Goodbye, cruel world!\n");
}
module_init(hello_init);
module_exit(hello_exit);

***隐藏网址***
-----------------------------------------------------------------------------
修改的这篇文章,自己加了几个注意点
***隐藏网址***
第一次的Linux kernel上机内容是编译一个内核。我用的是Ubuntu,有很多地方和其它 Linux不一样,所以就来把我的过程写下来,以后也好有个参照
***隐藏网址***
==================================================备注
如果是就是编译ubuntu本省自带的内核,只需要
新立得搜索linux souce,下载带ubuntupatch的kernel的source code。
sudo apt-get source linux-source-2.6.27
==================================================备注
我下载的是linux-2.6.19.2.tar.gz可以下到的最新版本了。下完之后当然是解压缩。不过还不能直接编译,因为Ubuntu的默认安装里缺少必要的组建。打开终端,输入一下命令:
sudo -i
apt-get install build-essential kernel-package libncurses5-dev
然后到新立得里把所有以ncurses开头的软件包全部装上,这样就可以开始编译内核了。
先运行以下命令,复制当前内核的配置文件。
cp /boot/config-`uname -r` ./.config
然后
make menuconfig
选择 "Load an Alternate Configuration File",再选择你刚才拷贝过来的.config文件作为配置文件。然后确定。当结束后,你选择退出时,会提示问你 "Do you wish to save your new kernel configuration?"选择yes即可。
接下来就要编译了。输入命令:
make
你也可以将编译任务分成2个线程来执行,只要输入:
make -j2
编译一般需要1~1.5小时左右,就看cpu的性能如何
编译完成后,开始安装:
make module_install
make install
然后添加引导信息,不过之前还是要装一个组件initramfs-tools,装完以后输入:
mkinitramfs -o /boot/initrd.img-2.X.XX /lib/modules/2.X.XX
==================================================备注
后面的参数不要忘记了,否则启动新内核会出现错误:
WARNING: Couldn’t open directory /lib/modules/2.6.15.7-ubuntu1: No such file or directory
FATAL: Could not open /lib/modules/2.6.15.7-ubuntu1/modules.dep.temp for writing: No such file or directory
==================================================备注
最后打开 /boot/grub/menu.lst
在 ## ## End Default Options ## 下面添加类似下面的两段
title Ubuntu, kernel 2.6.19.2
root (hd0,4)
kernel /vmlinuz-2.6.19.2 root=/dev/hdd6
initrd /initrd.img-2.6.19.2
savedefault
boot
title Ubuntu, kernel 2.6.19.2 (recovery mode)
root (hd0,4)
kernel /vmlinuz-2.6.19.2 root=/dev/hdd6 ro single
initrd /initrd.img-2.6.19.2
boot
注意 root和kernel字段要模仿menu.lst下面已有的内容写。下面是 (hd0,4),那么你也写(hd0,4),下面写root=/dev/hdd6,你也写root=/dev/hdd6,只是内核的版本号改为现在编译的版本号。然后重新启动计算机,在GRUB中选择新内核启动。如果启动失败,你可以重启选择老内核。

Ubuntu新内核开机end kernel panic-not syncing:VFS: Unable to mount root fs on unknown-block(0,0)

首先,说明一下LFS kernel panic -not syncing :VFS:Unable to mount root fs on Unknown-block(0,0)出现的几个可能原因:
1./etc/fstab文件配置错误,此配置文件是记录硬盘分区的文件,配置错了,当然就有可能出现Unable to mount root fs啦~~~解决这问题的办法就是找一张LIVECD启动了系统,然后修改此文件内容,很简单的,只要用文本器打开了这文件,然后认真研究一下就明白该怎样做,如果出现要uuid之类的东东,那就到/dev/disk/by-uuid/目录下找,只要使得各挂载点与分区对应即可。
2.menu.lst。/boot/grub/menu.lst 此文件出错也是有可能的。当出现这错误的时候,不妨先看看此文件配置是否正确。诸如sda与hda的问题,sda不行,就试下hda呗~~~
3.initrd没有启动。内核载入内存后,某些系统会执行initrd文件的,如果没有启动,就会出现本文要解决的那问题。当然LFS是没有做initrd文件的,所以忽略此问题。如果您的出错原因在这,那你就用LIVECD启动了,然后到/boot/目录下,看看有没有initrd相似的文件,有的话,在menu.lst文件的启动项中加入initrd (hdx,y)/boot/initrd 这样就能解决了~~~
4.内核编译的时候没有添加相应的硬件模块~~~这问题不好说,因为编译一个内核真的太不简单了~~~哈哈~~~有个必定能编译成功的办法,就是,假如你使用的某个版本的linux,把/proc/config.gz文件复制出来,解压,然后重命名为.config(注意前面有个点哦~~~)。复制到将要编译的内核源文件中,然后直接make,当然,如果你要在内核中增加其他模块的话,就先make menuconfig。当然,选项只能是只增不减罗~~~哈哈~~~(说明一下,这方法我没测试过,但是按道理来说是可以的,至少同一版本的内核是肯定成功的,除非不同版本之间的.config文件格式不一样了~~~)

Linux内核源码如何编译Ubuntu源代码在哪里呢

编译linux内核步骤:
1、安装内核
如果内核已经安装(/usr/src/目录有linux子目录),跳过。如果没有安装,在光驱中放入linux安装光盘,找到kernel-source-2.xx.xx.rpm文件(xx代表数字,表示内核的版本号),比如RedHat linux的RPMS目录是/RedHat/RPMS/目录,然后使用命令rpm -ivh kernel-source-2.xx.xx.rpm安装内核。如果没有安装盘,可以去各linux厂家站点或者www.kernel.org下载。
2、清除从前编译内核时残留的.o 文件和不必要的关联
cd /usr/src/linux
make mrproper
3、配置内核,修改相关参数,请参考其他资料
在图形界面下,make xconfig;字符界面下,make menuconfig。在内核配置菜单中正确设置个内核选项,保存退出
4、正确设置关联文件
make dep
5、编译内核
对于大内核(比如需要SCSI支持),make bzImage
对于小内核,make zImage
6、编译模块
make modules
7、安装模块
make modules_install
8、使用新内核
把/usr/src/linux/arch/i386/boot/目录内新生成的内核文件bzImage/zImage拷贝到/boot目录,然后修改/etc/lilo.conf文件,加一个启动选项,使用新内核bzImage/zImage启动。格式如下:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux-new ### 告诉lilo缺省使用新内核启动linux ###
append="mem=256M"
image=/boot/vmlinuz-2.2.14-5.0
label=linux
read-only
root=/dev/hda5
image=/boot/bzImage(zImage)
label=linux-new
read-only
root=/dev/hda5
保留旧有的启动选项可以保证新内核不能引导的情况,还可以进入linux进行其他操作。保存退出后,不要忘记了最重要的一步,运行/sbin/lilo,使修改生效。
9、重新生成ram磁盘
如果您的系统中的/etc/lilo.conf没有使用了ram磁盘选项initrd,略过。如果您的系统中的/etc/lilo.conf使用了ram磁盘选项initrd,使用mkinitrd initrd-内核版本号,内核版本号命令重新生成ram磁盘文件,例如我的Redhat 6.2:
mkinitrd initrd-2.2.14-5.0 2.2.14-5.0
之后把/etc/lilo.conf中的initrd指向新生成的initrd-2.2.14-5.0文件:
initrd=/boot/initrd-2.2.14-5.0
ram磁盘能使系统性能尽可能的优化,具体参考/usr/src/linux/Documents/initrd.txt文件
10、重新启动,OK!

ubuntu下怎么编译linux内核

linux下编译软件通用三步曲:
./configure
make
sudo make install
但是编译内核要复杂的多,特别是定制内核,需要根据特定的硬件信息,配置.config文件。可以说.config文件是编译linux内核是否优异的关键。也可以到github或者码元上寻找有没有类似的型号,找到同一型号的电脑可以直接copy到内核源码目录下,然后依次执行shell命令:make
sudo make install
sudo make modules_install
sudo update-grub2 或者sudo update-grub就可以了

怎样ubuntu环境下编译内核详解

步骤/方法
一、下载源代码和编译软件的准备
***隐藏网址***
注意,点击2.6.25内核的F版,即完整版。
如果你懒得去网站点联接,运行下列命令:
***隐藏网址***
安装有关编译程序。安装make ,gcc, make-kpkg,运行menuconfig等等和编译内核相关的工具。安装不了,请检查/etc/apt/sources.list 文件。有关命令:代码:$sudo apt-get install build-essential kernel-package libncurses5-dev
二、解压源代码注意,网上很多教程上说应该解压到 /usr/src,纯属以讹传讹,linux掌门人linus说解压到任何目录上都可以。当然,linus的说法是正确的。我放在自己的主目录下的src目录。如果你下载源代码是放到自己的主目录下或者运行上面的wget下载的,那么运行下列命令:代码:$ cd ~$ mkdir src && tar jfx linux-2.6.25.10.tar.bz2 -C src/现在,源代码就在 ~/src/linux-2.6.25.10进入源代码的目录,准备下一步的工作。后面都在这个目录里面进行。代码:$ cd ~/src/linux-2.6.25.10
三、开始编译前的准备工作。首先,清理以前编译时留下的临时文件。如果是刚刚解开的包,不需要执行这步。如果是第二次或者是第n次编译,那么一定要执行。相关命令如下:代码:$ sudo make mrproper网上很多教程上说把现在使用的内核的config拷贝过来参考,据实验,是不需要的,ubuntu还有debian会自动做这步。不过这条命令倒是可以学习一下。当然你可以将以前的配置拷贝过来。命令:代码:cp /boot/config-`uname -r` ./.config
***隐藏网址***
五、必须强调的几个选项:1、
在“General setup”里面的“Prompt for development and/or incomplete
code/drivers”金步国认为是不需要。但是如果你的硬件比较新,那几乎是必须选的,这样,我们才可以找到4965无线网卡,alsa声音驱动等
等。Kernel log buffer size 我选15,双核。如果你用ia64,要选16。Control Group support 集群支持?可以不要Choose SLAB allocator (SLUB (Unqueued Allocator)) 内存管理模式slab和slub选择slub。
2、在“Block layer”里,假如没有2TB的硬盘,就去掉:Support for Large Block Devices 。Support for Large Single Files 也不需要,谁有2TB的文件?
3、Processor type and features中是关于cpu的,要认真选。Symmetric multi-processing support是打开多核的开关,我的cpu是双核的,选中。Processor family (Core 2/newer Xeon) 我的是Core 2/newer Xeon。找到自己的cpu后,把Generic x86 support选项取消。Subarchitecture Type 选(PC-compatible)Maximum number of CPUs 输入自己的核心数目,我输入2。SMT (Hyperthreading) scheduler support说的是超线程技术,P4有支持的,我的t8100不支持,目前大部分市场上的家用cpu都不支持。High Memory Support (4GB) 1G以下选1G;我是3G,选4G;4G以上的选16G在“ Timer frequency ”里,默认是250Hz,较新的cpu都可以选择了1000Hz,性能更好。
4、Power management options中把APM (Advanced Power Management) BIOS support关闭。现在的电脑都用acpi了。CPU Frequency scaling 是笔记本cpu节电技术Default CPUFreq governor (conservative) cpu节电模式有四个,笔记本默认选conservative比较好。ACPI Processor P-States driver 必须选,不然CPU Frequency就不能用。后面的可选自己硬件相关的,我选的是Intel Enhanced SpeedStep和 Intel Speedstep on ICH-M chipsets,其他的统统消灭。
5、Bus options的选择:Bus options (PCI, PCMCIA, EISA, MCA, ISA)PCI support PCI Express support 现在新买的机器基本上都是PCI Express了ISA support 较新的新机器没有ISA设备,可以去掉MCA support 去掉NatSemi SCx200 support 去掉PCI Hotplug Support Support for PCI Hotplug (EXPERIMENTAL) 如果没有PCI热插拔设备,去掉这里的选项可以考虑全部编译进内核,而不是以模块形式存在。
6、Device Drivers是重点,由于linux不但面向个人工作站,更多的是面向服务器的应用,所以可以把自己机器上没有的硬件全部去掉,而不用面面俱到。但是通用型的选项要慎重。比如在网卡的部分,除了我的千兆网卡 Broadcom Tigon3 support和4965无线网卡Intel Wireless WiFi 4965AGN,其余的硬件支持统统去掉。再比如声卡部分,我的是hd声卡,我只是在PCI devices中,选intel hd 声卡,再选Build IDT/Sigmatel HD-audio codec support,除此之外的硬件支持全部去掉。
声卡还有一个细节,在ubuntu7.10里面, 需要在/etc/modprobe.d/alsa-base后面添加options
snd-hda-intel probe_mask=1
model=3stack,这样我的笔记本喇叭才可以发声,不然只有外接耳机或者音箱。这次编译以后,这个动作就不必了,但是两个耳机插口只有一个可以用
了。再比如我的电脑中没有agp,就可以直接把agp相关的选项全部取消。要注意的:ATA/ATAPI/MFM/RLL support Include IDE/ATA-2 DISK support 如果你的/boot是放在IDE硬盘上,那么这里一定要选*,选M都不行。否则启动时会出现“waiting for root file system”的提示而停滞不前。 SCSI emulation support 要用刻录机,必须选。SCSI device support 现在都是SATA硬盘,一定要选* SCSI disk support 如果你的/boot放在SATA硬盘上,一定要选*。
SCSI CDROM support 虽然康宝刻录机是ide接口的,但是必须把它当成scsi接口的,这是老问题了。用刻录机,必须选。
Graphics supportSupport for frame buffer devices 选中,进入选择 VESA VGA graphics support 选上,不然字符界面启动会有问题,后面的显卡选择:由于我的显卡是nvidia 8400gs,要自己安装nvidia公司的驱动,所以一个都没有选。这样导致ubuntu开机动画会出问题,我索性在grub中的splash字符全部删除,把开机动画关闭。字符界面很正常。 Console display driver support 有人开机后字符控制台错误,就是这部分选项没有选,出问题了。 Framebuffer Console support 需要打开。
***隐藏网址***
CD-ROM/DVD Filesystems ISO 9660 CDROM file system support 一般选*DOS/FAT/NT Filesystems VFAT (Windows-95) fs support 有FAT32分区就选*吧 NTFS file system support 有NTFS分区就选*吧 NTFS write support 如果想对 NTFS分区进行写操作,选*必须将启动盘的文件系统编译进内核,默认是编译成模块,这样无法启动系统。ubuntu采用的文件系统是ext3,请把ext2,ext3相关的必要选项都编译进入内核。
8、Virtualization这个大类是我多花几百元买t8100的主要原因,因为t8100支持intel vt技术使linux上的虚拟机的性能大幅度提高。这里的选项我除了amd的,其他都编译成模块。
9、全部设置完成,最后一项是保存设置。按照我的习惯,先在上一层目录保存一个备份,文件名类似 ../config20080630然后再保存到当起目录,文件名 .config退出设置程序。
六、开始编译内核。ubuntu的工具是make-kpkg,和其他的发行版相比,步骤相对简单。相关命令:代码:$sudo make-kpkg clean 这条命令好像不要超级权限,很多资料上说要,不过这不是原则问题。
$ sudo make-kpkg -initrd --initrd --append-to-version=dell1400 kernel_image kernel-headers上述命令中的dell1400可以用自己喜欢的字符代替,最后的字符一定是数字.输完上述命令回车之前,建议大家把浏览器还有别的运用程序都关掉,机器开始的工作比较艰苦。
我的机器大概十几分钟。
七、安装内核编译完成就是安装工作。编译好的内核在上一层目录。包括linux-headers-...-_i386.deb和linux-image-...-i386.deb两个文件,如果你不搞开发的话,只要安装内核就可以,头文件以后要用的时候再说。安装相关命令:
代码:$ cd ..$ sudo dpkg -i linux-image-(按tab键)文件名很长,如果不用tab自动补足是不可能的,tab键万岁。安装完成后和老内核比较一下大小代码:
$ ls -l /boot/
八、重新启动验证新内核。代码:$ sudo reboot
***隐藏网址***
十、无线网卡相关的内核选项是Networking ---》Wireless ---》Generic IEEE 802.11 Networking Stack (mac80211)还有4965的驱动。4965
无线网卡驱动虽然已经编入内核,但没有firmware无法使用。需要把原来内核的firmware拷贝到新内核对应的目录,名字和内核一致,我的内核是
linux-image-2.6.25.10dell1400,那建的目录名就是2.6.25.10dell1400。代码:具体命令:$ cd /lib/firmware/$ sudo mkdir 2.6.25.10dell1400把你的老内核中的4965的firmware拷贝过来。$ sudo cp 2.6.24-16-generic/* 2.6.25.10dell1400/上面的命令和下面的命令是等价的:$ cd /lib/firmware/$ sudo cp -R 2.6.24-16-generic/ 2.6.25.10dell1400/
重新启动系统,无线网卡就正常了。
附编译使用的机器配置:dell vostro 1400,t8100,nvidia 8400cs显卡,内置SigmaTel STAC9228芯片的声卡,4965无线网卡,BCM5906M千兆网卡,3G内存,160G硬盘,combo刻录。
编译系统版本:ubuntu 8.04桌面版.

在Ubuntu上做内核编程,要安装哪个包怎么做

1、gcc (C编译器)
安装 apt-get install gcc
2、make (源代码维护工具,它能自动检测出需要重新编译的源文件并根据你设定的编译规则去重新编译程序)
安装 apt-get install make
3.kernel-source (内核源码包。你可以apt-cache search kernel-source搜索到内核源代码包,并用uname -r命令查看到当前系统内核版本,然后用apt-get install kernel-source-xxxx来安装和你内核版本一致的内核源代码包)
如果你不想重新编译内核,内核源代码包kernel-source是完全可以不下载的。
4.kernel-headers(内核源代码头文件包,不管你是要进行内核模块开发还是进行驱动程序开发,这个包都是必须 要安装的。因为作为一个内核模块编写者,通常会调用内核里的一些东西,比如内核头文件,内核数据结构申明等。它里面包含了一些关键的内核头文件)
安装 apt-cache search kernel-headers
uname -r
apt-get instakk kernel-headers-xxxx
5.kernel-kbuild(用来编译内核模块的,下载安装这个包后会发现在/usr/src目录下多了一个kernel-kbuild-xxxx开头的目录,下面只有scripts一个目录,这是用来编译内核模块的一些脚本程序)
安装 apt-cache search kernel-kbuild
uname -r
apt-get install kernel-kbuild-xxxx
6.build-essential(包含一个在建立deb包过程中起关键作用的包的信息列表,如果你不想建立deb包你就不需要安装此表)
安装 apt-get install build-essential
7.kernel-package(如果你想把内核镜像做成一个deb包来用,那么必须用安装这个包了)
安装 apt-get install kernel-package
8.initrd-tools(如果你想制作启动过程的initrd镜像,则这个包是必不可少的)
安装 apt-get instakk initrd-tools
假设你编写了一个内核模块程序,源代码如下:
/* hello.c */
#include 《linux/init.h》
#include 《linux/module.h》
#include 《linux/kernel.h》
static int hello_init(void)
{
  printk(KERN_ALERT "Hello, linux kernel module
");
  return 0;
}
static void hello_exit(void)
{
  printk(KERN_ALERT "Goodbye, I’ve created a linux kernel module sucessfully
");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
 你需要这此源程序编写一个makefile,内容如下:
#Makefile for hello.c file
#
KERNEL_DIR:=/usr/src/linux
obj-m:=hello.o
default:
$(MAKE) -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules
clean:
$(RM) .*.cmd *.mod.c *.o *.ko -r .tmp
  注意:这里的KERNEL_DIR是指内核源代码头文件所在目录的上一级目录,通常就是指内核源代码目录。该目录一般包括有arch,drivers,fs,include,init,ipc,kernel,lib,mm,net,scripts,usr,sound,security等目录。
  在本示例中,/usr/src/linux是一个链接,指向了/usr/src/kernel-headers-2.6.8-3目录。
  编写好makefile后就可以输入make命令生成hello.ko内核模块了,然后你可以用:
insmode hello.ko
  命令来加入内核模块,然后用:
rmmod hello
  来删除内核模块。

如何用ubuntu编译linux内核

***隐藏网址***
2、进入Linux内核源码所在的目录(cd Linux内核),解压该内核代码到/usr/src下:
sudo tar -xjvf linux-2.6.33.1.tar.bz2 -C /usr/src
3、进入Linux内核源码解压后的目录/usr/src/linux-2.6.33.1(cd /usr/src/linux-2.6.33.1)
4、sudo make mrproper 净化解压后的源代码
5、sudo make menuconfig 对内核选项进行配置
在配置过程中会发生如下错误:
*** Unable to find the ncurses libraries or the
*** required header files.
*** ’make menuconfig’ requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
make 错误 1
make: *** 错误2
解决办法:
(1)cd / 进入根目录后,在终端输入:sudo apt-get install ncurses
信息:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
现在没有可用的软件包 ncurses,但是它被其它的软件包引用了。
这可能意味着这个缺失的软件包可能已被废弃,
或者只能在其他发布源中找到
E: 软件包 ncurses 还没有可供安装的候选者
(2)然后接着在终端输入:sudo apt-get install libncurses*
(3)再cd /usr/src/linux-2.6.33.1进入内核所在目录,再次输入sudo make menuconfig就好了!
6、对于配置可选择General Setup或者选择其他的自定义选项保存后退出。
7、sudo make dep 建立模块间的依赖信息
8、sudo make clean 删除配置时留下的一些不用的文件
(7、8两步可能对于一些PC没有作用)
9、sudo make bzImage 编译内核,内核较小时可以用make zImage
10、sudo make modules 编译内核模块
当然,在编译内核时,可通过make-j《n》来加速内核的编译,n一般等于CPU数量的两倍。单核,n=2;双核,n=4.即执行sudo make -j4就可以编译了!
11、sudo make modules_install 安装内核模块
12、sudo make install 安装内核
13、cd / 后在终端输入:sudo mkinitramfs 2.6.33.1 -o /boot/initrd.img-2.6.33.1-generic
14、到此为止,构建内核完毕,第十二步把内核映象和System.map拷贝到/boot/下
#sudo cp /usr/src/linux-2.6.33.1/arch/i386/boot/bzImage /boot/vmlinuz-2.6.33.1-generic
#sudo cp System.map /boot/System.map-KERNEL_VERSION
#sudo ln -s /boot/System.map-KERNEL_VERSION /boot/System.map
15、
(1)修改grub配置文件
在终端输入:sudo update-grub2,就会把刚才编译的内核加入了Grub;(此时就可以重启了,重启后在Grub启动项里多了Ubuntu, Linux 2.6.33.1-generic)
若还需修改(在Ubuntu10.04中没有采用menu.lst,而是用的grub.cfg(/boot/grub/)),则修改grub.cfg就可以了,
在终端中输入:sudo gedit /boot/grub/grub.cfg 用root账户进入grub.cfg并
(或用sudo chmod +w /boot/grub/grub.cfg改变grub.cfg的权限后在进行)
如将Grub中的menuentry "Ubuntu, Linux 2.6.33.1-generic"{...}修改为menuentry "Ubuntu, Linux 2.6.33.1-liqiong"{...}(Linux 2.6.33.1-generic是我们刚才编译的内核)
(2)修改default变量
在/boot/grub/grub.cfg中,设置set default="【某个数字】"(设置Grub启动项里的默认启动项)
在Grub启动项里,从0数起,我的XP在第10项,所以set default="10",即XP就是默认的启动项了。
最后重启即可。

ubuntu新内核编译不能启动

你可能是make menuconfig出的问题。你可以先make localmodconfig(我不大确信拼写是否正确,如果报错,make help一下,在这之前把能用到的电脑功能都用一次,使内核装入相关内核模块与驱动)然后再make menuconfig去检查驱动是否完全。
如果觉得编译速度有些慢,可以在编译时给make增加-j4(这个数字应当与cpu个数*2相等为好,请自行更改)参数。
本人在ubuntu10.04上成功编译3.0.4内核。相信您也一定能成功。

LINUX驱动开发: UBUNTU下,比如我写了个.C 驱动文件 之后我要把它放在哪里,我才能得到.ko文件,详细些

两种方法:
1,直接添加进内核。
a, 比如进入drivers/char/目录,把xxx.c文件拷贝到该目录
b, 修改drivers/char/Kconfig文件,自定义仿照其他选项,添加自己的选项XXX。
c, 修改drivers/char/Makefile文件,添加obj-$(CONFIG_XXX) += xxx.o
d, 进入内核根目录,make menuconfig,进入device drivers-》character devices在这里面找到XXX选项,配置成“M”,也就是模块编译,会生成xxx.ko
2,随便建一个目录,写Makefile,这个Makefile里面,要指定内核源码根目录,并调用内核源码的Makefile,来编译当前目录的文件,类似一下格式,可在网上找一个Makefile来修改:
CFILES = xxx.c
DRIVER_NAME = xxxx
KSRC := /home/linux/linux-2.6.xxx
TARGET = $(DRIVER_NAME).ko
obj-m += $(DRIVER_NAME).o
$(DRIVER_NAME)-objs := $(CFILES:.c=.o)
default:
$(MAKE) -C $(KSRC) SUBDIRS=$(shell pwd) modules

关于ubuntu编译内核模块和Ubuntu编译了新的内核,进入新内核时一直显示载入Linux 5.6.7,载入初始化内存盘咋回事的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

ubuntu编译内核模块(Ubuntu编译了新的内核,进入新内核时一直显示载入Linux 5.6.7,载入初始化内存盘咋回事)

本文编辑:admin

更多文章:


entertainment搭配(We need a man of great ( )to help us overcome our difficulties A enthusiasm B entertainment C enter)

entertainment搭配(We need a man of great ( )to help us overcome our difficulties A enthusiasm B entertainment C enter)

大家好,关于entertainment搭配很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于We need a man of great ( )to help us overcome our difficulties A en

2026年6月27日 22:30

菜单和列表属于?底线和列表的区别

菜单和列表属于?底线和列表的区别

本篇文章给大家谈谈和列表,以及菜单和列表属于对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录菜单和列表属于底线和列表的区别python序列类型包括哪三种菜单和列表属于设计单列的菜单列表。菜单和列表属于设计单列的菜单列表。菜单最

2026年9月16日 06:45

python的源代码(python3.7idle如何测试源代码)

python的源代码(python3.7idle如何测试源代码)

大家好,关于python的源代码很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于python3.7idle如何测试源代码的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有

2026年9月5日 22:15

java文件中文乱码怎么解决(java 写入txt文件的中文乱码是怎么回事)

java文件中文乱码怎么解决(java 写入txt文件的中文乱码是怎么回事)

各位老铁们,大家好,今天由我来为大家分享java文件中文乱码怎么解决,以及java 写入txt文件的中文乱码是怎么回事的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我

2025年6月12日 11:30

extent和extension的区别(“in some extent”和“to some extent”有什么区别)

extent和extension的区别(“in some extent”和“to some extent”有什么区别)

各位老铁们,大家好,今天由我来为大家分享extent和extension的区别,以及“in some extent”和“to some extent”有什么区别的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的

2025年10月4日 13:30

java队列(JAVA中队列和栈的区别)

java队列(JAVA中队列和栈的区别)

“java队列”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看java队列(JAVA中队列和栈的区别)!本文目录JAVA中队列和栈的区别Java设计一个名为Queue的类用于存储整数像栈一样,队列具有元素在栈中,元素以“后进

2025年9月30日 04:45

statue law(简单点的旅游景点介绍英文 旅游英语介绍景点)

statue law(简单点的旅游景点介绍英文 旅游英语介绍景点)

“statue law”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看statue law(简单点的旅游景点介绍英文 旅游英语介绍景点)!本文目录简单点的旅游景点介绍英文 旅游英语介绍景点请问common law (普通法)

2026年3月17日 02:45

b站cos区怎么没了(哔咔cos区隐藏到哪了)

b站cos区怎么没了(哔咔cos区隐藏到哪了)

本篇文章给大家谈谈b站cos区怎么没了,以及哔咔cos区隐藏到哪了对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录哔咔cos区隐藏到哪了不存在战区b站怎么没了b站知识区没了cos在b站属于什么区b站直播区没了B站上的游戏中心怎

2025年7月30日 02:30

黄页营销网站大全(营销型企业网站有哪些)

黄页营销网站大全(营销型企业网站有哪些)

各位老铁们好,相信很多人对黄页营销网站大全都不是特别的了解,因此呢,今天就来为大家分享下关于黄页营销网站大全以及营销型企业网站有哪些的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录营销型企业网站有哪些十大销售网站

2025年12月15日 15:30

设置 form action(Form表单中的action后面怎么写才能访问到servlet,servlet如何配置已经晕了)

设置 form action(Form表单中的action后面怎么写才能访问到servlet,servlet如何配置已经晕了)

“设置 form action”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看设置 form action(Form表单中的action后面怎么写才能访问到servlet,servlet如何配置已经晕了)!本文目录Form表

2025年10月15日 04:15

oracle数据库建表的完整步骤(新建Oracle数据库的3种方法)

oracle数据库建表的完整步骤(新建Oracle数据库的3种方法)

本篇文章给大家谈谈oracle数据库建表的完整步骤,以及新建Oracle数据库的3种方法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录新建Oracle数据库的3种方法oracle如何创建表以及向表里面添加数据oracle怎么

2025年10月28日 05:15

delphi方法就是让专家在一起(什么是德尔菲技术有什么特点和优点)

delphi方法就是让专家在一起(什么是德尔菲技术有什么特点和优点)

各位老铁们好,相信很多人对delphi方法就是让专家在一起都不是特别的了解,因此呢,今天就来为大家分享下关于delphi方法就是让专家在一起以及什么是德尔菲技术有什么特点和优点的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看

2026年8月27日 15:30

2023年又封城了(2022年石家庄三次封城时间)

2023年又封城了(2022年石家庄三次封城时间)

大家好,关于2023年又封城了很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于2022年石家庄三次封城时间的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目

2026年1月3日 15:30

asp.net(asp.net是什么)

asp.net(asp.net是什么)

其实asp.net的问题并不复杂,但是又很多的朋友都不太了解asp.net是什么,因此呢,今天小编就来为大家分享asp.net的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录asp.net是什么asp.net 验

2025年9月16日 16:00

proposal四级(四级proposal要写书信体吗)

proposal四级(四级proposal要写书信体吗)

大家好,今天小编来为大家解答以下的问题,关于proposal四级,四级proposal要写书信体吗这个很多人还不知道,现在让我们一起来看看吧!本文目录四级proposal要写书信体吗四级作文求批改四级英语作文关于提案的常用短语或单词四级单词

2025年6月7日 01:15

intelligent名词形式(intelligent 名词)

intelligent名词形式(intelligent 名词)

大家好,今天小编来为大家解答以下的问题,关于intelligent名词形式,intelligent 名词这个很多人还不知道,现在让我们一起来看看吧!本文目录intelligent 名词wisely的名词是什么intelligent是什么意思

2025年9月3日 19:00

linux查看python版本(Linux系统更改默认Python版本)

linux查看python版本(Linux系统更改默认Python版本)

其实linux查看python版本的问题并不复杂,但是又很多的朋友都不太了解Linux系统更改默认Python版本,因此呢,今天小编就来为大家分享linux查看python版本的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析

2026年4月7日 06:15

html焦点图(求助高手在Dreamweaver中怎么做焦点图)

html焦点图(求助高手在Dreamweaver中怎么做焦点图)

这篇文章给大家聊聊关于html焦点图,以及求助高手在Dreamweaver中怎么做焦点图对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录求助高手在Dreamweaver中怎么做焦点图优秀的焦点图设计通常包含哪些元素求助高手在D

2026年8月8日 12:30

周杰伦所有专辑列表(周杰伦都出过哪些音乐专辑)

周杰伦所有专辑列表(周杰伦都出过哪些音乐专辑)

“周杰伦所有专辑列表”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看周杰伦所有专辑列表(周杰伦都出过哪些音乐专辑)!本文目录周杰伦都出过哪些音乐专辑周杰伦一共出过哪些专辑周杰伦各张专辑名称及收录歌曲周杰伦的专辑有哪些周杰伦都

2026年2月24日 00:15

linux安装exe的软件(lunex用什么杀毒软件和怎么装exe文件)

linux安装exe的软件(lunex用什么杀毒软件和怎么装exe文件)

这篇文章给大家聊聊关于linux安装exe的软件,以及lunex用什么杀毒软件和怎么装exe文件对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录lunex用什么杀毒软件和怎么装exe文件怎么在linux上安装exe文件linu

2026年4月7日 05:15

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索