Linux源代码下载
linux源代码-fork.c源代码
linux源代码-fork.c源代码/** linux/kernel/fork.c*//--fork()用于创建子进程* (C) 1991 Linus Torvalds*//** 'fork.c' contains the help-routines for the 'fork' system call* (see also system_call.s), and some misc functions('verify_area').* Fork is rather simple, once you get the hang of it, but the memory * management can be a bitch. See 'mm/mm.c': 'copy_page_tables()' */#include <errno.h>#include <linux/sched.h>#include <linux/kernel.h>#include <asm/segment.h>#include <asm/system.h>//--写页面验证,若页面不可写,则复制页面extern void write_verify(unsigned long address);long last_pid=0;//--进程空间区域写前验证函数void verify_area(void * addr,int size){unsigned long start;start = (unsigned long) addr;size += start & 0xfff;start &= 0xfffff000;start += get_base(current->ldt[2]); //--逻辑地址到线性地址的转换while (size>0) {size -= 4096;write_verify(start);start += 4096;}}int copy_mem(int nr,struct task_struct * p) //--复制内存页表{//--由于采用写时复制技术,这里只复制目录和页表项,不分配内存unsigned long old_data_base,new_data_base,data_limit;unsigned long old_code_base,new_code_base,code_limit;code_limit=get_limit(0x0f);//--取段限长data_limit=get_limit(0x17);old_code_base = get_base(current->ldt[1]);old_data_base = get_base(current->ldt[2]);if (old_data_base != old_code_base)panic("We don't support separate I&D");if (data_limit < code_limit)panic("Bad data_limit");new_data_base = new_code_base = nr * TASK_SIZE;p->start_code = new_code_base;set_base(p->ldt[1],new_code_base);set_base(p->ldt[2],new_data_base);if(copy_page_tables(old_data_base,new_data_base,data_limit)) { //--复制页表free_page_tables(new_data_base,data_limit);return -ENOMEM;}return 0;}/** Ok, this is the main fork-routine. It copies the system process* information (task[nr]) and sets up the necessary registers. It * also copies the data segment in it's entirety.*///--fork()子程序,它复制系统进程信息,设置寄存器,复制数据段(代码段)int copy_process(int nr,long ebp,long edi,long esi,long gs,long none,long ebx,long ecx,long edx, long orig_eax,long fs,long es,long ds,long eip,long cs,long eflags,long esp,longss) //--复制进程{struct task_struct *p;int i;struct file *f;p = (struct task_struct *)get_free_page(); //--为新任务数据结构分配内存if (!p)return -EAGAIN;task[nr] = p;*p = *current; /* NOTE! this doesn't copy the supervisor stack */p->state = TASK_UNINTERRUPTIBLE;p->pid = last_pid;p->counter = p->priority;p->signal = 0;p->alarm = 0;p->leader = 0; /* process leadership doesn't inherit */p->utime = p->stime = 0;p->cutime = p->cstime = 0;p->start_time = jiffies;p->tss.back_link = 0;p->tss.esp0 = PAGE_SIZE + (long) p;p->tss.ss0 = 0x10;p->tss.eip = eip;p->tss.eflags = eflags;p->tss.eax = 0;p->tss.ecx = ecx;p->tss.edx = edx;p->tss.ebx = ebx;p->tss.esp = esp;p->tss.ebp = ebp;p->tss.esi = esi;p->tss.edi = edi;p->tss.es = es & 0xffff;p->tss.cs = cs & 0xffff;p->tss.ss = ss & 0xffff;p->tss.ds = ds & 0xffff;p->tss.fs = fs & 0xffff;p->tss.gs = gs & 0xffff;p->tss.ldt = _LDT(nr);p->tss.trace_bitmap = 0x80000000;if (last_task_used_math == current)__asm__("clts ; fnsave %0 ; frstor %0"::"m" (p->tss.i387));if (copy_mem(nr,p)) {task[nr] = NULL;free_page((long) p);return -EAGAIN;}for (i=0;i<NR_OPEN;i++) //--如果父进程中有文件是打开的,则将对应文件的打开次数增1if (f=p->filp[i])f->f_count++;if (current->pwd)current->pwd->i_count++;if (current->root)current->root->i_count++;if (current->executable)current->executable->i_count++;if (current->library)current->library->i_count++;set_tss_desc(gdt+(nr<<1)+FIRST_TSS_ENTRY,&(p->tss));//--在GDT表中设置新任务的TSS和LDTset_ldt_desc(gdt+(nr<<1)+FIRST_LDT_ENTRY,&(p->ldt));p->p_pptr = current;p->p_cptr = 0;p->p_ysptr = 0;p->p_osptr = current->p_cptr;if (p->p_osptr)p->p_osptr->p_ysptr = p;current->p_cptr = p;p->state = TASK_RUNNING; /* do this last, just in case */return last_pid;}intfind_empty_process(void)//--为新进程取得不重复的进程号last_pid{int i;repeat:if ((++last_pid)<0) last_pid=1;for(i=0 ; i<NR_TASKS ; i++)if (task[i] && ((task[i]->pid == last_pid) ||(task[i]->pgrp == last_pid)))goto repeat;for(i=1 ; i<NR_TASKS ; i++)if (!task[i])return i;return -EAGAIN; }。
linux libcurl库编译使用方法
在Linux系统中编译和使用libcurl库,通常需要以下几个步骤:
1. 下载源代码
访问Curl官网下载最新版本的libcurl源代码包,例如
2. 解压源代码
3. 安装依赖
根据你的Linux发行版,可能需要安装一些依赖包才能编译libcurl。
这些依赖通常包括openssl、zlib等。
例如,在Debian/Ubuntu上:
在CentOS/RHEL上:
4. 配置编译选项
运行configure脚本配置编译参数,比如启用共享库、指定安装路径等:
5. 编译与安装
执行make命令进行编译:
如果一切顺利,接着执行make install完成安装:
6. 验证安装
安装完成后,可以检查libcurl版本以验证是否成功安装:
7. 在项目中使用libcurl
要在C或C++项目中使用libcurl,首先确保在编译时链接到已安装的libcurl库,例如在gcc命令行中添加-lcurl参数:
同时,需要包含必要的头文件:
以上是一个通用的libcurl编译和使用的流程,具体的配置选项可能会因不同的需求而变化,请根据实际情况调整。
W。
编译 linux 源代码
编译linux 源代码
编译 Linux 源代码需要以下步骤:
1.下载 Linux 源代码
可以从官方网站或者其它可靠的源下载 Linux 源代码。
2.解压源代码
使用解压工具将下载的源代码解压到一个目录下。
3.配置编译环境
在终端中输入以下命令来配置编译环境:
bash复制代码
export ARCH=arm64 # 根据自己的硬件架构选择合适的架构
export CROSS_COMPILE=arm64-linux-gnueabi- # 根据自己的硬件架构选择合适的编译器前缀
4.执行编译命令
在终端中输入以下命令来执行编译:
bash复制代码
make menuconfig # 配置内核选项,按上下键选择需要的选项,按空格键进行确认/取消选择,按Y 键保存更改,最后按 Esc 键退出配置菜单。
make # 开始编译内核,等待编译完成。
5.等待编译完成
编译完成后,会在arch/$ARCH/boot/目录下生成一个名为Image的文件,这就是编译好的 Linux 内核映像文件。
Linux_FTP_源码包
FTP服务器一、下载 /二、安装[root@localhost windows]# cp vsftpd-2.0.7.tar.gz /usr/src[root@localhost windows]# cd /usr/src[root@localhost src]# tar -zxvf vsftpd-2.0.7.tar.gz[root@localhost src]# cd vsftpd-2.0.7[root@localhost vsftpd-2.0.7]# cat -n INSTALL |less 查看帮助文件。
[root@localhost vsftpd-2.0.7]# make[root@localhost vsftpd-2.0.7]# make install[root@localhost vsftpd-2.0.7]# which vsftpd三、配置服务器[root@localhost vsftpd-2.0.7]# cp vsftpd.conf /etc 将配置示例文件copy到/etc目录下。
[root@localhost vsftpd-2.0.7]# cp RedHat/vsftpd.pam /etc/pam.d/ftp pam是一个身份验证模块,可对用户身份进行验证。
[root@localhost vsftpd-2.0.7]# vi /etc/vsftpd.conflisten=YES 最后一行加入此代码,需要服务器独立运行,所以自己监听端口。
[root@localhost vsftpd-2.0.7]# /usr/local/sbin/vsftpd & 启动服务并在后台运行。
[1] 15040 --->监听编号。
[root@localhost vsftpd-2.0.7]# ps -aux|grep vsftpd 查看到PID。
[root@localhost vsftpd-2.0.7]# netstat -tnl 查看一下有没有开放21的端口。
curl linux编译
curl linux编译curl是一个非常流行的开源网络库,它支持多种协议(如HTTP、FTP、SMTP等)和常见的加密方式(如SSL、TLS等),并提供易于使用的命令行工具,用于在Linux系统上进行网络通信。
下面是关于在Linux上编译curl的指南。
1. 下载curl源代码首先,你需要从curl官方网站下载源代码。
你可以使用以下命令:$ wget https://curl.se/download/curl-7.79.1.tar.gz 这个命令将从curl官方网站下载curl-7.79.1版本的源代码,并将其保存为curl-7.79.1.tar.gz文件。
2. 解压缩源代码下载完成后,你需要解压缩源代码。
你可以使用以下命令:$ tar -xzvf curl-7.79.1.tar.gz这个命令将解压缩curl-7.79.1.tar.gz文件,并将源代码保存在一个名为curl-7.79.1的目录中。
3. 配置编译选项接下来,你需要配置curl的编译选项。
你可以使用以下命令: $ cd curl-7.79.1$ ./configure这个命令将执行一个脚本,用于检查你的系统并确定最佳的编译选项。
如果一切正常,你将看到一个类似下面的输出:......configure: Configured to build curl/libcurl:configure: CC: gccconfigure: CFLAGS: -g -O2 -Wdeclaration-after-statement configure: CPPFLAGS:configure: LD: gccconfigure: LDFLAGS:注意,你可能需要在configure命令中添加一些选项,以适应你的特定需求。
你可以查看configure的帮助文档,以获取更多信息:$ ./configure --help4. 编译和安装完成配置后,你可以开始编译curl。
arm-linux-gcc下载与安装
下载glibc-linuxthreads
wget /gnu/glibc/glibc-linuxthreads-2.13.tar.gz
解压
tar -zxvf glibc-2.13.tar.gz
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
方法一,参照这篇文章的做法/view/ba4f4e222f60ddccda38a01a.html
直接下载较高版本的库libstdc++.so.6.0.10,网址/source/1670346
先删除libstdc++.so.6
[root@localhost ~]# rm /usr/lib/libstdc++.so.6
rm:是否删除 符号链接 “/usr/lib/libstdc++.so.6”? y
[root@localhost ~]#
然后将下载的libstdc++.so.6.0.10复制到/usr/lib/目录下面
打开设置文件
[root@localhost opt]# vi /etc/profile
在打开的文件的
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
各版本linux下载地址
QUOTE:ftp:///pub/RedhatAS2.1/rorhadv1.iso
ftp:///pub/RedhatAS2.1/rorhadv2.iso
ftp:///pub/RedhatAS2.1/rorhadv3.iso
或
ftp:///pub/Mandrake9.1/Mandrake91-cd1-inst.i586.iso
ftp:///pub/Mandrake9.1/Mandrake91-cd2-ext.i586.iso
ftp:///pub/Mandrake9.1/Mandrake91-cd3-i18n.i586.iso
ftp://166.111.121.3/Linux/RedHat/AdvSvr2.1/rorhadv5.iso
或
/ISO/Redhat%20Advanced%20Server/rorhadv1.iso
/ISO/Redhat%20Advanced%20Server/rorhadv2.iso
QUOTE:ftp://202.96.64.158/pub/Mandrake9.1/Mandrake91-cd1-inst.i586.iso
ftp://202.96.64.158/pub/Mandrake9.1/Mandrake91-cd2-ext.i586.iso
ftp://202.96.64.158/pub/Mandrake9.1/Mandrake91-cd3-i18n.i586.iso
/download/tools/linux/rhelas3/rhel-3-i386-as-disc3.iso
/download/tools/linux/rhelas3/rhel-3-i386-as-disc4.iso
在Ubuntu10.04下驱动开发环境搭建
在Ubuntu10.04驱动开发环境搭建一、准备开发工具开发工具主要有gcc、gdb、make在Ubuntu中可以通过下面这个命令安装:$apt-get install build-essential我没有执行上面的命令,因为我在之前编译过Android,相关工具已经配置好了:$sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev x11proto-core-dev libx11-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos libncurses5-dev二、下载Linux源代码linux源码可以通过以下几种途径获得:1)直接去下载2)通过包管理工具下载源码用下面指令查看可用的源码包:$ sudo apt-cache search linux-sourcelinux-source - Linux kernel source with Ubuntu patcheslinux-source-2.6.32 - Linux kernel source for version 2.6.32 with Ubuntu patches在Ubuntu中可以通过下面这个命令下载:$apt-get install linux-source-(版本号)$sudo apt-get install linux-source-2.6.32下载后的文件linux-source-2.6.32.tar.bz2在/usr/src目录中,解压:$su – root$cd /usr/src$tar jxvf linux-source-2.6.32.tar.bz2解压后在/usr/src目录下产生了一个linux-source-2.6.32源码目录三、编译内核依次执行下列命令(必须都执行,否则编译错误,如果不是root用户,命令前加sudo):1)配置内核$su – root$cd /usr/src/linux-source-2.6.32$make config或$make menuconfig或者$ sudo cp ../linux-headers-2.6.32-21-generic/.config ./.config如果当前运行内核打开了CONFIG_IKCONFIG_PROC参数,则可以$zcat /proc/config.gz > .config$make oldconfig2)编译内核2.6版本后前两步不需要,直接make即可$make prepare$make scripts$make3)安装模块$make modules 这一步不需要$make module_install执行结束之后,会在/lib/modules下生成新的目录/lib/modules/2.6.32.44+drm33.19四、生成镜像文件1)生成内核镜像文件$make bzImage执行完成后将在arch/i386/boot/目录下生成bzImage镜像文件,使用下面命令安装到系统的/boot目录下:$sudo make installsh /usr/src/linux-source-2.6.32/arch/x86/boot/install.sh 2.6.32.44+drm33.19 arch/x86/boot/bzImage \ System.map "/boot"命令完成后在/boot目录下,将多了vmlinuz-2.6.32.44+drm33.19和System.map-2.6.32.44+drm33.19两个文件或者直接拷贝$ sudo cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.32.44+drm33.192)生成要载入ramdisk的映像文件如果linux系统按照在scsi磁盘上,这部是必须的,否则可以跳过。
Linux0.01内核源代码及注释
Bootsect.s(1-9)!! SYS_SIZE is the number of clicks (16 bytes) to be loaded.! 0x3000 is 0x30000 bytes = 196kB, more than enough for current! versions of linux ! SYS_SIZE 是要加载的节数(16 字节为1 节)。
0x3000 共为1 2 3 4 5 60x7c000x00000x900000x100000xA0000system 模块代码执行位置线路0x90200! 0x30000 字节=192 kB(上面Linus 估算错了),对于当前的版本空间已足够了。
!SYSSIZE = 0x3000 ! 指编译连接后system 模块的大小。
参见列表1.2 中第92 的说明。
! 这里给出了一个最大默认值。
!! bootsect.s (C) 1991 Linus Torvalds!! bootsect.s is loaded at 0x7c00 by the bios-startup routines, and moves! iself out of the way to address 0x90000, and jumps there.!! It then loads 'setup' directly after itself (0x90200), and the system! at 0x10000, using BIOS interrupts.!! NOTE! currently system is at most 8*65536 bytes long. This should be no! problem, even in the future. I want to keep it simple. This 512 kB! kernel size should be enough, especially as this doesn't contain the! buffer cache as in minix!! The loader has been made as simple as possible, and continuos! read errors will result in a unbreakable loop. Reboot by hand. It! loads pretty fast by getting whole sectors at a time whenever possible.!! 以下是前面这些文字的翻译:! bootsect.s (C) 1991 Linus Torvalds 版权所有!! bootsect.s 被bios-启动子程序加载至0x7c00 (31k)处,并将自己! 移到了地址0x90000 (576k)处,并跳转至那里。
Gentoo-linux-2.6.34内核-手动编译详细教程
编译内核详解(linux-2.6.34)2010-06-20by李阳mail:kmalloc@ 1.下载源代码1.1下载到内核源码官方网站/下载或,$wget /pub/linux/kernel/v2.6/linux-2.6.34.tar.bz21.2解压源码$cd~/src$tar xjvf linux-2.6.34.tar.bz22.编译软件准备(ubuntu)2.1在ubuntu系统安装编译内核需要的软件包$sudo apt-get install build-essential kernel-packagelibncurses5-dev2.2清理以前编译时留下的临时文件如果是刚刚解开的包,不需要执行这步。
如果是第二次或者是第n次编译,那么一定要执行。
$cd linux-2.6.34$make mrproper2.3拷贝已有的配置文件$cp/boot/config-`uname-r`./.config2.4自动精简内核配置(将你需要用的所用硬件都插在电脑上,这样会根据现在电脑链接的硬件进行自动配置一下,也可以省略此步)make localmodconfig3.配置内核3.1配置内核的工具方法一:$make menuconfig方法二:xconfig.安装xconfig$sudo apt-get install libqt3-headers libqt3-mt-dev libqt3-compat-headers libqt3-mt.使用xconfig配置内核$sudo make xconfig.xconfig选项意义:圆中点是编译成可以随时加人的模块(以下简称M),方块中一勾是编译进入内核(以下简称Y),空就是不要(简称N)3.2内核配置及优化General setup--->[*]Prompt for development and/or incomplete code/drivers<===显示尚在开发中或尚未完成的代码和驱动.我不是内核或驱动开发人员。
Linux内核源代码(free)
Linux系统的好处 Linux的运行及相关基本概念
什么是Linux?
Linux是一个类Unix(Unix-like)的操作系统, 在1991年发行了它的第一个版本 在Linux内核维护网站上,“What is Linux?”
Portable Operating System Interface Standard 可移植操作系统接口标准 由IEEE制订,并由ISO接受为国际标准。 Institute for Electrical and Electronic Engineers 电气电子工程师学会[美] International Organization for Standardization 国际标准化组织 制定各行各业各种产品和服务的技术规范(国际标准)
Linux简介
什么是Linux? “Linux”在不同的语境下的含义 Linux发展简史 Linux操作系统的主要内容 Linux版本
内核版本 发行版本
Linux系统的好处 Linux的运行及相关基本概念
“Linux”
在不同的语境下,“Linux”具有不同的内涵,例 如:
Linux发展简史
1991年11月,芬兰赫尔辛基大学的学生 Linus Torvalds写了个小程序,后来取名为Linux,放在 互联网上。他表达了一个愿望,希望借此搞出一 个操作系统的“内核”来,这完全是一个偶然事 件 1993,在一批高水平黑客的参与下,诞生了Linux 1.0 版 1994年,Linux 的第一个商业发行版 Slackware 问 世
基于I386的Linux使用int 0x80进行系统调用
I386系统的基本概念
代码的运行 堆栈的概念 内核态与用户态 中断/异常/系统调用 虚拟内存
使用Python脚本在Linux上实现远程文件下载
使用Python脚本在Linux上实现远程文件下载随着互联网的发展,我们经常需要从远程服务器下载文件到本地机器上。
在Linux系统上,我们可以使用Python脚本来实现这个功能。
本文将给出一个简单的Python脚本,帮助你实现在Linux上远程文件下载的功能。
以下是Python脚本的代码:```pythonimport requestsdef download_file(url, save_path):response = requests.get(url)with open(save_path, 'wb') as file:file.write(response.content)print("文件下载成功!保存路径为:", save_path)if __name__ == "__main__":url = input("请输入要下载的文件地址:")save_path = input("请输入文件保存路径:")download_file(url, save_path)```上面的代码使用了Python的requests库,该库可以帮助我们发送HTTP请求。
首先,我们定义了一个函数`download_file`,它接受两个参数:文件的URL和文件保存的路径。
在函数内部,我们使用`requests.get()`方法发送GET请求获取文件内容,并将内容写入本地文件中。
接下来,在`main`函数中,我们使用`input()`方法获取用户输入的文件URL和保存路径。
然后,调用`download_file`函数实现文件的下载和保存。
你可以在Linux上运行上述脚本,并根据提示输入文件的URL和保存路径。
脚本会自动下载文件,并将其保存到指定的路径下。
需要注意的是,脚本中使用的URL必须是可公开访问的。
如果URL需要身份验证或其他限制条件,你需要修改脚本以适应这些情况。
linux命令free源码解读:Procps free.c
linux命令free源码解读:Procps free.c作者:isayme 发布时间:September 26, 2011 分类:Linux我们讨论的是linux命令free的实现。
free命令是随软件包procps一同发布的。
完整的代码下载链接:下载procps首先找到free命令的实现文件free.c,直接看main函数部分:while( (i = getopt(argc, argv, "bkmglotc:s:V") ) != -1 )switch (i) {case 'b': shift = 0; break;case 'k': shift = 10; break;case 'm': shift = 20; break;case 'g': shift = 30; break;case 'l': show_high = 1; break;case 'o': old_fmt = 1; break;case 't': show_total = 1; break;case 's': pause_length = 1000000 * atof(optarg); break;case 'c': count = strtoul(optarg, NULL, 10); break;case 'V': display_version(); exit(0);default:fwrite(help_message,1,strlen(help_message),stderr);return 1;}很明显,这是检查命令输入参数的。
如判断是free -k还是free -m等,很简单的代码。
显然这不是本文的重点。
继续看紧接着的代码:do {meminfo();printf(" total used free shared buffers cached\n"); printf("%-7s %10Lu %10Lu %10Lu %10Lu %10Lu %10Lu\n", "Mem:",S(kb_main_total),S(kb_main_used),S(kb_main_free),S(kb_main_shared),S(kb_main_buffers),S(kb_main_cached));}代码不是完整的整块,后面的内容都是根据上段代码获取的参数有选择的输出相应的信息。
linux内核编译过程解释
linux内核编译过程解释
Linux内核是操作系统的核心部分,它控制着系统的资源管理、任务调度、驱动程序等重要功能。
编译Linux内核是一项非常重要的任务,因为它决定了系统的性能、稳定性和可靠性。
下面我们来了解一下Linux内核的编译过程。
1. 下载内核源代码:首先,我们需要从官方网站上下载Linux
内核的源代码。
这里我们可以选择下载最新的稳定版本或者是开发版,具体取决于我们的需求。
2. 配置内核选项:下载完源代码后,我们需要对内核进行配置。
这一步通常需要使用make menuconfig命令来完成。
在配置过程中,我们需要选择系统所需的各种驱动程序和功能选项,以及定制化内核参数等。
3. 编译内核:配置完成后,我们可以使用make命令开始编译内核。
编译过程中会生成一些中间文件和可执行文件,同时也会编译各种驱动程序和功能选项。
4. 安装内核:编译完成后,我们可以使用make install命令将内核安装到系统中。
这一步通常需要将内核文件复制到/boot目录下,并更新系统的引导程序以便正确加载新内核。
5. 重启系统:安装完成后,我们需要重启系统以使新内核生效。
如果新内核配置正确,系统应该能顺利地启动并正常工作。
总的来说,Linux内核的编译过程是一个相对复杂的过程,需要一定的技术和操作经验。
但是,通过了解和掌握相关的编译技巧和命
令,我们可以轻松地完成内核编译工作,并为系统的性能和稳定性做出贡献。
linux下载文件命令
linux下载⽂件命令wget命令wget命令⽤来从指定的URL下载⽂件。
wget⾮常稳定,它在带宽很窄的情况下和不稳定的⽹络中有很强的适应性,如果由于⽹络的原因下载失败,wget会不断的尝试,直到整个⽂件下载完毕。
如果是服务器打断下载过程,它会再次连到服务器上从停⽌的地⽅继续下载。
这对从那些限定了链接时间的服务器上下载⼤⽂件⾮常有⽤。
语法wget(选项)(参数)选项-a<⽇志⽂件>:在指定的⽇志⽂件中记录资料的执⾏过程;-A<后缀名>:指定要下载⽂件的后缀名,多个后缀名之间使⽤逗号进⾏分隔;-b:进⾏后台的⽅式运⾏wget;-B<连接地址>:设置参考的连接地址的基地地址;-c:继续执⾏上次终端的任务;-C<标志>:设置服务器数据块功能标志on为激活,off为关闭,默认值为on;-d:调试模式运⾏指令;-D<域名列表>:设置顺着的域名列表,域名之间⽤“,”分隔;-e<指令>:作为⽂件“.wgetrc”中的⼀部分执⾏指定的指令;-h:显⽰指令帮助信息;-i<⽂件>:从指定⽂件获取要下载的URL地址;-l<⽬录列表>:设置顺着的⽬录列表,多个⽬录⽤“,”分隔;-L:仅顺着关联的连接;-r:递归下载⽅式;-:⽂件存在时,下载⽂件不覆盖原有⽂件;-nv:下载时只显⽰更新和出错信息,不显⽰指令的详细执⾏过程;-q:不显⽰指令执⾏过程;-nh:不查询主机名称;-v:显⽰详细执⾏过程;-V:显⽰版本信息;--passive-:使⽤被动模式PASV连接FTP服务器;--follow-ftp:从HTML⽂件中下载FTP连接⽂件。
参数URL:下载指定的URL地址。
实例使⽤wget下载单个⽂件wget /testfile.zip以下的例⼦是从⽹络下载⼀个⽂件并保存在当前⽬录,在下载的过程中会显⽰进度条,包含(下载完成百分⽐,已经下载的字节,当前下载速度,剩余下载时间)。
linuxc基于libcurl库的ftp上传和下载代码
linux c 基于libcurl 库的ftp上传和下载代码/zengraoli/article/details/115173672013昨天考虑好了IM传送图片的方式,用的是FTP做缓存来传递图片,以减少聊天服务器的压力,用的是libcurl库,自己下载了一个Server-U 服务器,下面是测试程序,上传和下载都跑通了,剩下的就是在程序中写逻辑来实现具体的功能了。
上传代码:[cpp] view plain copy print?//ftp上传实例// 服务器地址:192.168.0.185 账号:spider 密码:spider // 在服务器路径a 上建立一个a.txt ,本地文件是test.txt // 命令行参数192.168.0.185 spider spider a a.txt D:/test.txt //#include<stdlib.h> //#include <stdio.h> //#include <curl/curl.h> //#include <string.h> // //int debugFun(CURL* curl, curl_infotype type, char* str, size_t len, void* stream) //{ // //只打印CURLINFO_TEXT 类型的信息// if(type == CURLINFO_TEXT) // { // fwrite(str, 1, len, (FILE*)stream); // } // return 0; //} // //int main(int argc, char** argv)//{ // CURL* curl; // CURLcode res; // char errorBuf[CURL_ERROR_SIZE]; // FILE*sendFile, *debugFile; // char ftpurl[256 + 1]; // char usrpasswd[64 + 1]; // // curl_slist *slist=NULL; // // if(argc != 7) // { //printf("Usage:\n\t./ftp ip username password ftpPath destFileName srcFile"); // return -1; // } // // //将相关的调试信息打印到dubugFile.txt中//if(NULL == (debugFile = fopen("debugFile.txt", "a+"))) // return -1; // // //打开ftp上传的源文件//if(NULL == (sendFile = fopen(argv[6], "r"))) // { // fclose(debugFile); // return -1; // } // // //获取需要发送文件的大小// fseek(sendFile, 0, SEEK_END); // int sendSize = ftell(sendFile); //if(sendSize < 0) // { //fclose(debugFile); // fclose(sendFile); // return -1; // } // fseek(sendFile, 0L,SEEK_SET); // // if((res =curl_global_init(CURL_GLOBAL_ALL)) != 0) //{ // fclose(debugFile); //fclose(sendFile); // return -1; // } //if((curl = curl_easy_init()) == NULL) // { // fclose(debugFile); // fclose(sendFile); //curl_global_cleanup(); // return -1; // }// // if(argv[4][strlen(argv[4]) - 1] != '/') //sprintf(ftpurl, "ftp://%s/%s/%s", argv[1], argv[4], argv[5]);// else // sprintf(ftpurl, "ftp://%s/%s%s",argv[1], argv[4], argv[5]); // curl_easy_setopt(curl, CURLOPT_URL, ftpurl); // //设置ftp上传url,组成如下的URL ////ftp://192.168.31.145//root/subdir/curl/testftp.txt // // sprintf(usrpasswd, "%s:%s", argv[2], argv[3]); //curl_easy_setopt(curl, CURLOPT_USERPWD, usrpasswd);// // curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); // curl_easy_setopt(curl, CURLOPT_DEBUGDATA, debugFile); // // curl_easy_setopt(curl,CURLOPT_READDATA, sendFile); //curl_easy_setopt(curl, CURLOPT_UPLOAD, 1); //curl_easy_setopt(curl, CURLOPT_INFILESIZE, sendSize);// curl_easy_setopt(curl,CURLOPT_FTP_CREATE_MISSING_DIRS, 1); // // curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, debugFun); // // res = curl_easy_perform(curl); // if(0 != res) // { // fclose(sendFile); // fclose(debugFile); // curl_easy_cleanup(curl);// curl_global_cleanup(); // return -1;// } // // curl_easy_cleanup(curl); //fclose(sendFile); // fclose(debugFile); //curl_global_cleanup(); // getchar(); // return 0;//}下载代码如下:[cpp] view plain copy print?//ftp下载实例#include <stdio.h>; #include <curl/curl.h>;#include <curl/types.h>; #include <curl/easy.h>; struct FtpFile //定义一个结构为了传递给my_fwrite函数.可用curl_easy_setopt的CURLOPT_WRITEDATA选项传递{ char *filename; FILE *stream; }; int my_fwrite(void *buffer, size_t size, size_t nmemb, void*stream) { struct FtpFile *out=(struct FtpFile *)stream; // stream指针其实就是指向struct FtpFile ftpfile的if(out && !out->stream){ out->stream=fopen(out->filenam e, "wb"); //没有这个流的话就创建一个名字是out->filename. if(!out->stream) return -1; } return fwrite(buffer, size, nmemb, out->stream); } int main(int argc, char*argv[]) { CURL *curl;CURLcode res; struct FtpFileftpfile={"D:/Success.txt",NULL}; //初始化一个FtpFile结构curl_global_init(CURL_GLOBAL_DEFAULT);curl = curl_easy_init(); if(curl){ curl_easy_setopt(curl,CURLOPT_URL,"ftp://192.168.0.185/a/a.txt");curl_easy_setopt(curl, CURLOPT_USERPWD,"spider:spider"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,my_fwrite); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile); //给相关函数的第四个参数传递一个结构体的指针curl_easy_setopt(curl, CURLOPT_VERBOSE,TRUE);//CURLOPT_VERBOSE 这个选项很常用用来在屏幕上显示对服务器相关操作返回的信息res = curl_easy_perform(curl);curl_easy_cleanup(curl);if(CURLE_OK != res)fprintf(stderr, "curl told us %d\n", res); }if(ftpfile.stream) fclose(ftpfile.stream);curl_global_cleanup(); return 0; }最后记录一个比较好用的:[cpp] view plain copyprint?#include <stdlib.h> #include <stdio.h>#include <curl/curl.h> #include <sys/stat.h> /* parse headers for Content-Length */ size_t getcontentlengthfunc(void *ptr, size_t size, size_t nmemb, void *stream) { int r; long len = 0; /*_snscanf() is Win32 specific */ //r = _snscanf(ptr, size * nmemb, "Content-Length: %ld\n", &len); r = sscanf((const char*)ptr, "Content-Length: %ld\n", &len); if (r) /* Microsoft: we don't read the specs */ *((long *) stream) = len; return size * nmemb; } /* discard downloaded data */ size_t discardfunc(void *ptr, size_t size, size_t nmemb, void *stream) { return size * nmemb; } //write data to upload size_t writefunc(void *ptr, size_t size, size_t nmemb, void *stream) { return fwrite(ptr, size, nmemb, (FILE*)stream); } /* read data to upload */ size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream) { FILE *f = (FILE*)stream; size_t n; if (ferror(f)) returnCURL_READFUNC_ABORT; n = fread(ptr, size, nmemb, f) * size; return n; } int upload(CURL*curlhandle, const char * remotepath, const char * localpath, long timeout, long tries) { FILE *f; long uploaded_len = 0; CURLcode r =CURLE_GOT_NOTHING; int c; f =fopen(localpath, "rb"); if (f == NULL){ perror(NULL); return 0; }curl_easy_setopt(curlhandle, CURLOPT_UPLOAD, 1L);curl_easy_setopt(curlhandle, CURLOPT_URL, remotepath); curl_easy_setopt(curlhandle, CURLOPT_USERPWD, "spider:spider"); if (timeout)curl_easy_setopt(curlhandle,CURLOPT_FTP_RESPONSE_TIMEOUT, timeout);curl_easy_setopt(curlhandle, CURLOPT_HEADERFUNCTION, getcontentlengthfunc); curl_easy_setopt(curlhandle, CURLOPT_HEADERDATA, &uploaded_len);curl_easy_setopt(curlhandle, CURLOPT_WRITEFUNCTION, discardfunc); curl_easy_setopt(curlhandle,CURLOPT_READFUNCTION, readfunc);curl_easy_setopt(curlhandle, CURLOPT_READDATA, f);curl_easy_setopt(curlhandle, CURLOPT_FTPPORT, "-"); /* disable passive mode */ curl_easy_setopt(curlhandle, CURLOPT_FTP_CREATE_MISSING_DIRS, 1L);curl_easy_setopt(curlhandle, CURLOPT_VERBOSE, 1L);for (c = 0; (r != CURLE_OK) && (c < tries); c++) { /* are we resuming? */ if (c) { /* yes *//* determine the length of the file already written *//* * With NOBODY and NOHEADER, libcurl will issue a SIZE * command, but the only way to retrieve the result is * to parse the returned Content-Length header. Thus, * getcontentlengthfunc(). We need discardfunc() above* because HEADER will dump the headers to stdout* without it. */curl_easy_setopt(curlhandle, CURLOPT_NOBODY, 1L);curl_easy_setopt(curlhandle, CURLOPT_HEADER, 1L);r = curl_easy_perform(curlhandle); if (r != CURLE_OK) continue;curl_easy_setopt(curlhandle, CURLOPT_NOBODY, 0L);curl_easy_setopt(curlhandle, CURLOPT_HEADER, 0L); fseek(f, uploaded_len, SEEK_SET);curl_easy_setopt(curlhandle, CURLOPT_APPEND,1L); } else { /* no */curl_easy_setopt(curlhandle, CURLOPT_APPEND,0L); } r =curl_easy_perform(curlhandle); } fclose(f);if (r == CURLE_OK) return 1; else{ fprintf(stderr, "%s\n", curl_easy_strerror(r));return 0; } } // 下载int download(CURL*curlhandle, const char * remotepath, const char * localpath, long timeout, long tries) { FILE *f; curl_off_t local_file_len = -1 ; long filesize =0 ; CURLcode r = CURLE_GOT_NOTHING; struct stat file_info;int use_resume = 0; //获取本地文件大小信息if(stat(localpath, &file_info) == 0){ local_file_len = file_info.st_size;use_resume = 1; } //追加方式打开文件,实现断点续传 f = fopen(localpath, "ab+"); if (f == NULL) { perror(NULL); return 0; }curl_easy_setopt(curlhandle, CURLOPT_URL, remotepath); curl_easy_setopt(curlhandle, CURLOPT_USERPWD, "spider:spider"); //连接超时设置curl_easy_setopt(curlhandle,CURLOPT_CONNECTTIMEOUT, timeout); //设置头处理函数curl_easy_setopt(curlhandle,CURLOPT_HEADERFUNCTION, getcontentlengthfunc);curl_easy_setopt(curlhandle, CURLOPT_HEADERDATA,&filesize); // 设置断点续传curl_easy_setopt(curlhandle,CURLOPT_RESUME_FROM_LARGE,use_resume?local_file_len:0);curl_easy_setopt(curlhandle, CURLOPT_WRITEFUNCTION, writefunc); curl_easy_setopt(curlhandle,CURLOPT_WRITEDATA, f);curl_easy_setopt(curlhandle, CURLOPT_NOPROGRESS, 1L); curl_easy_setopt(curlhandle, CURLOPT_VERBOSE, 1L);r = curl_easy_perform(curlhandle); fclose(f); if (r == CURLE_OK) return 1; else{ fprintf(stderr, "%s\n", curl_easy_strerror(r)); return 0; } } int main(int c, char **argv){ CURL *curlhandle = NULL; CURL *curldwn = NULL; curl_global_init(CURL_GLOBAL_ALL); curlhandle = curl_easy_init(); curldwn = curl_easy_init(); upload(curlhandle, "ftp://192.168.0.185/a/success", "D:/abc.jpg", 1, 3); download(curldwn, "ftp://192.168.0.185/a/success", "D:/abc1.jpg", 1, 3); curl_easy_cleanup(curlhandle);curl_easy_cleanup(curldwn); curl_global_cleanup(); return 0; }。
RedHat Linux 源码安装MYSQL步骤
作者:书剑飘香1.下载mysql server and client。
Mysql官网地址:/downloads/ 首选进入下载页面然后进入Mysql版本下载页面在Linux下选择源代码的安装方式然后下载Linux下的源代码压缩包第二步:我把mysql软件源码包存放在/home/softDev 下边,源码包编译安装的位置在/usr/local/mysql 下边由于现在的MySQL都使用cmake进行编译安装,所以在安装MySql之前,我们首先要把cmake 装到Linux系统上。
(1)安装cmake下载地址:/在安装cmake之前,系统里必须现有gcc和g++程序(2)解压cmake源代码压缩包,并且编译和安装tar zxvf cmake-2.8.10.2.tar.gzcd cmake-2.8.10.2./configuremakemake install(3)准备工作,创建mysql用户组groupadd mysqluseradd -g mysql mysql创建Mysql数据库的安装目录和存放数据文件的目录mkdir -pv /usr/local/mysql/data(4)解压缩Mysql源码包tar xzf mysql-5.5.27.tar.gzcd mysql-5.5.27cmake 编译Mysql#安装make && make install注意事项:从mysql5.5起,mysql源码安装开始使用cmake了。
下面是介绍configure选项如何映射到cmake的等值参数。
1. 命令语法:重新编译时,需要清除旧的对象文件和缓存信息# make clean# rm -f CMakeCache.txt安装选项参数地址:/uid-20774942-id-1993581.html(5)设置权限chown -R mysql:mysql /usr/local/mysql(6)初始化数据库/usr/local/mysql/scripts/mysql_install_db --user=mysql--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data(7)复制一个mysql的配置文件cp /usr/local/mysql/support-files/f /etc/f(8)后台启动Mysql服务查看是否有MySql的端口netstat -tnlp | grep :3306另外也可以通过脚本的方式启动,如下:#将mysql的启动服务添加到系统服务中cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld #给所有用户都增加可执行的权限chmod a+x /etc/init.d/mysqld#现在可以使用下面的命令启动mysqlservice mysqld start#停止mysql服务service mysqld stop#重启mysql服务service mysqld restart将mysql服务添加到开机启动项,让mysql服务开机启动chkconfig --add mysqldchkconfig --level 35 mysqld on。
arm-linux-gcc下载与安装
[root@localhost ~]#
重新测试交叉编译是否能
用
[root@localhost ~]# arm-linux-gcc test.c -o test
[root@localhost ~]#
[root@localhost ~]#
检验是否替换完成
[root@localhost ~]# strings /usr/lib/libstdc++.so.6|grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
打开设置文件
[root@localhost opt]# vi /etc/profile
在打开的文件的
# Path manipulation
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
在友善之臂官方网站/download.asp下载arm-linux-gcc4.4.3。
2,删除之前安装有旧版本,执行
[root@localhost ~]# rm -rf /opt/arm
3,对新版本arm-linux-gcc-4.4.3进行解压(注意,如果我们加上了-C,那么就会自动解压到/usr/local/arm/这个目录下),但是友善之臂按照下列方式解压,不会解压到/usr/local/arm/目录下的,这是因为友善之臂把/usr/local/arm/目录修改成了 /opt/FriendlyARM/toolschain/,除非自己在把它修改过来
linux下下载程序源代码ubuntu和fedora
linux下查看程序源代码一、UBUNTU#which more <-----------查看more的位置,debian下使用which。
/bin/more#dpkg -S /bin/more <-----------查看More文件属于哪个软件util-linux: /bin/more#apt-get source util-linux <----------下载源代码, 在其中查找more,不行就用find二、Fedora1、查看程序的所在地[root@localhost usr]# whereis dateuname: /bin/date /usr/share/man/man1/date.1.gz /usr/share/man/man1p/date.1p.gz /usr/share2、查看程序的rpm包名,软件包名[root@localhost usr]# rpm -qf /bin/datecoreutils-8.5-7.fc14.i6863、下载源码包##没有yumdownloader 的话可以这样子安装#yum install yum-utils[workhard@localhost tmp]$ yumdownloader --source coreutils-8.5-7.fc14.i686 ##source下载源码包到这一步后有两种方法可以查看到源码包,第一种方法[workhard@localhost tmp]$ rpm -qpl coreutils-8.5-7.fc14.src.rpm | grep tar ##查询rpm中的 tar 文件,源码一般放在这里coreutils-8.5.tar.xz##从rpm包中提取指定的文件[workhard@localhost tmp]$ rpm2cpio coreutils-8.5-7.fc14.src.rpm | cpio -idv coreutils-8.5.tar.xz coreutils-8.5.tar.xz9446 blocks[workhard@localhost coreutils-8.5]$ tar Jxvf coreutils-8.5.tar.xz##到解压出来的coreutils-8.5/src/中就能找到相关的源码了第二种方法:安装源码包[workhard@localhost tmp]$ rpm -i coreutils-8.5-7.fc14.src.rpm ##安装源码包warning: user mockbuild does not exist - using rootwarning: group mockbuild does not exist - using root不用管警告信息##可以通过locate命令查询代码包被安装到哪里了[liuhaitao@localhost tmp]$ locate *coreutils*tar*/home/liuhaitao/coreutils-8.12.tar.xz --当前yumdownloader下载的源码包地方/home/liuhaitao/rpmbuild/SOURCES/coreutils-8.5.tar.xz[liuhaitao@localhost ]$ cd /home/liuhaitao/rpmbuild/SOURCES/[liuhaitao@localhost SOURCES]$ tar xvf coreutils-8.12.tar.xz由于我已经解压过了,所以只有让您们看以下命令[liuhaitao@localhost src]$ cd coreutils-8.12/src/所以在src目录下可以看见所有的源代码,所以你可以选择自己的程序的源代码,因为这个包里包含了很多的程序的源代码,所以要选择自己的包安装*.src.rpm后怎么卸载[workhard@localhost SOURCES]$ cd /home/workhard/rpmbuild/SOURCES[workhard@localhost SPECS]$ rpmbuild --rmsource --rmspec coreutils.spec**相关说明4、yumdownloadercomes from the yum-utils package, if you don't have that installed already. #yum install yum-utils5、RPM用法rpm {-i|--install} [install-options] PACKAGE_FILE ...-f, --file FILEQuery package owning FILE.-p, --package PACKAGE_FILEQuery an (uninstalled) package PACKAGE_FILE.-l, --listList files in package.-qf:查找指定文件属于哪个RPM软件包-qpl:列出RPM软件包内的文件信息;6、rpm2cpio- Extract cpio archive from RPM Package Manager (RPM)package.顾名思义,rpm2cpio是将rpm包文件转换成cpio归档文件7、CPIO用法cpio - copy files to and from archives-i 抽取的意思,和"--extract"等同-d 建立目录,和"--make-directories"等同-v 冗余信息输出,和"--verbose"等同8、rpmbuild用法--rmsourceRemove the sources after the build--rmspecRemove the spec file after the build。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 课程设计题目:下载某个版本的linux源代码,生成一个定制的linux操作系统,完成后该系统可以用来作为启动系统使用。
2.如何做的问题?内核版本要编译一个最新的内核,您需要首先下载它的源代码在您下载内核的源代码前,您要知道到您要找什么。
首先要问您自己的问题是-- 您需要一份稳定的还是测试版的内核?稳定版内核通常版本号第二位用偶数数字 -- 例如, 2.0.38、2.2.15、2.2.1 8 和2.4.1 是被认为是“稳定”的内核(分别由于其包含 0、2、2 和4)。
如果您想尝试测试版内核,您通常需要找那些版本号第二位是奇数的号码又最高的内核。
例如,2.3.99 和 2.1.38都是测试版内核(分别由于其包含 3 和 1)。
内核版本历史 2.2 系列的内核被认为是较新而且稳定的内核。
如果"较新"和"稳定"是您想要的,查找一个版本号的第三位是最高的2.2 内核(2.2.16 是目前最新的版本)。
当 2.2 系列的内核仍在开发中,2.3 系列已经开始了。
这个系列是作为将被集成到 2.4稳定版系列的新功能和高级功能的测试版。
2.3 系列已经到了 2.3.99,其开发已经停止。
开发人员已经开始着手2.4.0。
如果您喜欢冒险使用最最新的技术,您可能想使用可以找到的最新的 2.4 系列内核。
2.4 版内核警告信息 Once a real 2.4 series kernel comes out(like 2.4.0), don't assume that the kernel is ready for use on a mission-critical system like a server. Even though2.4 is supposed tobe a stable series, early 2.4 kernels are likely to be not quite up tosnuff. As is often the case i n the computer industry, the first version of anything can have fairly sizable bugs. While this may not be a problem i f you're testing the kernel on your home workstation, it is a risk you may want to avoid when you machine provides val uable services to others.下载内核如果您只是想编译一个您已安装内核的新版本(例如,实现 SMP 支持),那不需要下载任何代码 -- 跳过此部分继续下一屏。
您可以在/pub/linux/kernel上找到内核代码。
当您进入到那后,您将发现内核的源代码按内核版本(v2.2、v 2.3等),被组织到多个不同的目录中。
在每个目录中,您将发现文件被冠以"linux-x.y.z.tar.gz"和"linux-x.y.z.tar.bz2"。
这些就是Linux 内核的源代码。
您也将看到冠以 "patch-x.y.z.gz" 和"pa tch-x.y.z.bz2"的文件。
这些是用来更新前面完整的内核源代码的补丁包。
如果您希望编译一个新的内核版本,您将需要下载这些"linu x"文件其中之一。
内核解包如果您已从 下载一个新的内核,现在是要将其解包时候了。
首先,cd/usr/src。
如果这里有一个存在的"linux"目录,将其改名为"linux.old" ("mv linux linux.old",以root 权限)。
现在,可以解开新的内核包了。
仍然在 /usr/src 目录下,输入 tar xzvf/path/to/my/kernel -x.y.z.tar.gz 或者 cat /path/to/my/kernel-x.y.z.tar.bz2| bz ip2 -d | tar xvf -,根据您下载的源代码是用 gzip 或 bzip2压缩的。
在输入完此命令后,您下载的内核源代码会被释放到一个新的"linux"目录下。
注意 -- 全套内核源代码通常将在硬盘上占用超过50兆空间!Index of /pub/linux/kernelName Last modified SizeParent Directory -Historic/ 20-Mar-2003 22:38 -SillySounds/ 14-Apr-2000 18:55 -crypto/ 24-Nov-2001 14:54 -people/ 03-Nov-2010 18:25 -ports/ 13-Mar-2003 01:34 -projects/ 26-Oct-2007 20:58 -testing/ 14-Feb-2002 05:32 -uemacs/ 20-Mar-2003 23:31 -v1.0/ 20-Mar-2003 22:58 -v1.1/ 20-Mar-2003 22:58 -v1.2/ 20-Mar-2003 22:58 -v1.3/ 20-Mar-2003 23:02 -v2.0/ 08-Feb-2004 09:17 -v2.1/ 20-Mar-2003 23:12 -v2.2/ 24-Mar-2004 19:22 -v2.3/ 20-Mar-2003 23:23 -v2.4/ 06-Sep-2010 05:43 -v2.5/ 14-Jul-2003 03:50 -v2.6/ 29-Oct-2010 05:13 - COPYING 13-Mar-1994 00:00 18KCREDITS 16-Sep-1996 16:36 36KREADME 16-Sep-1996 16:36 12KIndex of /pub/linux/kernel/v2.4Name Last modified SizeParent Directory - old-test-kernels/ 20-Mar-2003 23:30 - snapshots/ 01-Jun-2005 09:47 - testing/ 02-Dec-2008 08:13 - ChangeLog-2.4.1 30-Jan-2001 07:57 2.5K ChangeLog-2.4.2 22-Feb-2001 01:02 2.4K ChangeLog-2.4.3 30-Mar-2001 05:02 2.5K ChangeLog-2.4.4 28-Apr-2001 01:43 2.6K ChangeLog-2.4.5 26-May-2001 01:25 3.1K ChangeLog-2.4.6 04-Jul-2001 00:06 4.3K ChangeLog-2.4.7 20-Jul-2001 21:24 2.6K。
ChangeLog-2.4.36.2 24-Feb-2008 20:51 276 ChangeLog-2.4.36.3 19-Apr-2008 14:41 584 ChangeLog-2.4.36.4 07-May-2008 04:19 266ChangeLog-2.4.37.8 31-Jan-2010 09:30 485 ChangeLog-2.4.37.9 01-Feb-2010 21:12 200 ChangeLog-2.4.37.10 06-Sep-2010 05:38 867 LATEST-IS-2.4.37.10 06-Sep-2010 05:38 0 drm-4.0.x.tar.bz2 09-Aug-2001 23:29 102K drm-4.0.x.tar.bz2.sign 09-Aug-2001 23:29 248 drm-4.0.x.tar.gz 09-Aug-2001 23:29 156K drm-4.0.x.tar.gz.sign 09-Aug-2001 23:29 248 drm-4.0.x.tar.sign 09-Aug-2001 23:29 248 linux-2.4.0.tar.bz2 04-Jan-2001 23:45 19M linux-2.4.0.tar.bz2.sign 04-Jan-2001 23:45 248 linux-2.4.0.tar.gz 04-Jan-2001 23:45 23M linux-2.4.0.tar.gz.sign 04-Jan-2001 23:45 248linux-2.4.2.tar.bz2 22-Feb-2001 01:00 20Mlinux-2.4.2.tar.gz 22-Feb-2001 01:00 24M linux-2.4.2.tar.gz.sign 22-Feb-2001 01:00 248 linux-2.4.2.tar.sign 22-Feb-2001 01:00 248 linux-2.4.3.tar.bz2 30-Mar-2001 05:03 20M linux-2.4.3.tar.bz2.sign 30-Mar-2001 05:03 248 linux-2.4.3.tar.gz 30-Mar-2001 05:03 25M linux-2.4.3.tar.gz.sign 30-Mar-2001 05:03 248 linux-2.4.3.tar.sign 30-Mar-2001 05:03 248 linux-2.4.4.tar.bz2 28-Apr-2001 01:43 20M linux-2.4.4.tar.bz2.sign 28-Apr-2001 01:43 248 linux-2.4.4.tar.gz 28-Apr-2001 01:43 25M linux-2.4.4.tar.gz.sign 28-Apr-2001 01:43 248 linux-2.4.4.tar.sign 28-Apr-2001 01:43 248 linux-2.4.5.tar.bz2 26-May-2001 01:26 21Mlinux-2.4.7.tar.gz 20-Jul-2001 21:25 26M linux-2.4.7.tar.gz.sign 20-Jul-2001 21:25 248 linux-2.4.7.tar.sign 20-Jul-2001 21:25 248linux-2.4.9.tar.sign 16-Aug-2001 18:32 248linux-2.4.14.tar.gz.sign 05-Nov-2001 23:30 248 linux-2.4.14.tar.sign 05-Nov-2001 23:30 248 linux-2.4.15.tar.bz2 23-Nov-2001 06:18 23M linux-2.4.15.tar.bz2.sign 23-Nov-2001 06:18 248 linux-2.4.15.tar.gz 23-Nov-2001 06:18 28M linux-2.4.17.tar.bz2 21-Dec-2001 17:52 23M linux-2.4.17.tar.bz2.sign 21-Dec-2001 17:52 248 linux-2.4.17.tar.gz 21-Dec-2001 17:52 28M…linux-2.4.36.8.tar.sign 19-Oct-2008 21:25 248 linux-2.4.36.9.tar.bz2 09-Nov-2008 22:42 30M linux-2.4.36.9.tar.bz2.sign 09-Nov-2008 22:42 248 linux-2.4.36.9.tar.gz 09-Nov-2008 22:42 37M linux-2.4.36.9.tar.gz.sign 09-Nov-2008 22:42 248linux-2.4.37.1.tar.bz2.sign 19-Apr-2009 18:45 248 linux-2.4.37.1.tar.gz 19-Apr-2009 18:45 37M linux-2.4.37.1.tar.gz.sign 19-Apr-2009 18:45 248 linux-2.4.37.1.tar.sign 19-Apr-2009 18:45 248 linux-2.4.37.2.tar.bz2 07-Jun-2009 19:53 30Mlinux-2.4.37.6.tar.gz 13-Sep-2009 09:41 37Mlinux-2.4.37.6.tar.gz.sign 13-Sep-2009 09:41 248linux-2.4.37.6.tar.sign 13-Sep-2009 09:41 248……linux-2.4.37.tar.bz2 02-Dec-2008 08:13 30Mlinux-2.4.37.tar.bz2.sign 02-Dec-2008 08:13 248patch-2.4.1.sign 30-Jan-2001 07:56 248patch-2.4.2.bz2 22-Feb-2001 01:00 1.1Mpatch-2.4.6.bz2 04-Jul-2001 00:07 1.3Mpatch-2.4.6.bz2.sign 04-Jul-2001 00:07 248patch-2.4.6.gz 04-Jul-2001 00:07 1.7Mpatch-2.4.6.gz.sign 04-Jul-2001 00:07 248patch-2.4.6.sign 04-Jul-2001 00:07 248/view/e25586270722192e4536f646.html3. 在Linux下编译内核现在我们来学习在Linux下编译内核。