linux-2.6.18移植
Linux操作系统考试题库
![Linux操作系统考试题库](https://img.taocdn.com/s3/m/1772a22cbcd126fff6050b0e.png)
一、选择题1)下列关于操作系统的叙述中,哪一条是不正确的?( C )A.操作系统管理计算机系统中的各种资源B.操作系统为用户提供良好的界面C.操作系统与用户程序必须交替运行D.操作系统位于各种软件的最底层2)Linux的发展始于()年,它是有()的一名大学生开发的。
( B )A. 1990、芬兰B. 1991、芬兰C. 1993、美国D. 1991、波兰3)内核不包括的子系统是( D )。
(进程管理系统\内存管理系统\I/O管理系统\ 虚拟文件系统\进程间同性间通信子系统)A.进程管理系统B.内存管理系统C.I/O管理系统D.硬件管理系统4)Linux 中权限最大的账户是( B )。
A. adminB. rootC. guestD. super5)在通常情况下,登录Linux 桌面环境,需要( B )。
A.任意一个帐户B.有效合法的用户帐号和密码C.任意一个登录密码D.本机IP 地址6)Linux文件权限中保存了( D )信息。
A.文件所有者的权限B.文件所有者所在组的权限C.其他用户的权限D.以上都包括7)Linux文件系统的文件都按其作用分门别类地放在相关的目录中,对于外部设备文件,一般应将其放在( C )目录中。
A./binB./etcC./devD./lib8)某文件的组外成员的权限为只读;所有者有全部权限;组内的权限为读与写,则该文件的权限为( D )。
A. 467B. 674C. 476D. 7649)文件exer1的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,下列命令正确的是( A )。
A. chmod a+x g+w exer1B. chmod 765 exer1C. chmod o+x exer1D. chmod g+w exer110)当前安装Linux的主机中位于第二个IDE接口的master接口挂接一块40GB的硬盘,其在Linux中的设备文件名为( B )。
Linux kernel内核升级全过程,教你一次成功
![Linux kernel内核升级全过程,教你一次成功](https://img.taocdn.com/s3/m/2c3a9ef8941ea76e58fa04c6.png)
序言由于开发环境需要在linux-2.6内核上进行,于是准备对我的虚拟机上的Linux系统升级。
没想到这一弄就花了两天时间(反复装系统,辛苦啊~~),总算把Linux系统从2.4.20-8内核成功升级到了2.6.18内核。
网上虽然有很多介绍Linux内核升级的文章,不过要么过时,下载链接失效;要么表达不清,不知所云;更可气的是很多文章在转载过程中命令行都有错误。
刚开始我就是在这些“攻略”的指点下来升级的,以致于浪费了很多时间。
现在,费尽周折,升级成功,心情很爽,趁性也来写个“升级攻略”吧!于是特意又在虚拟机上重新安装一个Linux系统,再来一次完美的升级,边升级边记录这些步骤,写成一篇Linux内核升级记实录(可不是回忆录啊!),和大家一起分享~~!一、准备工作首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。
启动Linux系统,并用根用户登录,进入终端模式下。
1、查看Linux内核版本# uname -a如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,也用不着看下文了,该干什么干什么去吧!~~~如果显示的是2.4.x,那恭喜你,闯关通过,赶快进行下一步。
2、下载2.6内核源码下载地址:/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz23、下载内核升级工具(1)下载module-init-tools-3.2.tar.bz2/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2(2)下载mkinitrd-4.1.18-2.i386.rpm/fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm(3)下载lvm2-2.00.25-1.01.i386.rpm/fedora/linux/3/i386/RPMS.core/lvm2-2.00.25-1.01.i386.rpm(4)下载device-mapper-1.00.19-2.i386.rpm/fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpm(2.6.18内核和这4个升级工具我都有备份,如果以上下载地址失效,请到/guestbook留下你的邮箱,我给你发过去)好啦,2.6内核和4个升级工具都下载完了(少一个也不行,如果没有下载齐全,请不要尝试下面的步骤,升级是不会成功的),下面回到Linux系统中开始配置工作吧。
Linux kernel内核升级全过程,教你一次成功
![Linux kernel内核升级全过程,教你一次成功](https://img.taocdn.com/s3/m/2c3a9ef8941ea76e58fa04c6.png)
序言由于开发环境需要在linux-2.6内核上进行,于是准备对我的虚拟机上的Linux系统升级。
没想到这一弄就花了两天时间(反复装系统,辛苦啊~~),总算把Linux系统从2.4.20-8内核成功升级到了2.6.18内核。
网上虽然有很多介绍Linux内核升级的文章,不过要么过时,下载链接失效;要么表达不清,不知所云;更可气的是很多文章在转载过程中命令行都有错误。
刚开始我就是在这些“攻略”的指点下来升级的,以致于浪费了很多时间。
现在,费尽周折,升级成功,心情很爽,趁性也来写个“升级攻略”吧!于是特意又在虚拟机上重新安装一个Linux系统,再来一次完美的升级,边升级边记录这些步骤,写成一篇Linux内核升级记实录(可不是回忆录啊!),和大家一起分享~~!一、准备工作首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。
启动Linux系统,并用根用户登录,进入终端模式下。
1、查看Linux内核版本# uname -a如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,也用不着看下文了,该干什么干什么去吧!~~~如果显示的是2.4.x,那恭喜你,闯关通过,赶快进行下一步。
2、下载2.6内核源码下载地址:/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz23、下载内核升级工具(1)下载module-init-tools-3.2.tar.bz2/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2(2)下载mkinitrd-4.1.18-2.i386.rpm/fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm(3)下载lvm2-2.00.25-1.01.i386.rpm/fedora/linux/3/i386/RPMS.core/lvm2-2.00.25-1.01.i386.rpm(4)下载device-mapper-1.00.19-2.i386.rpm/fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpm(2.6.18内核和这4个升级工具我都有备份,如果以上下载地址失效,请到/guestbook留下你的邮箱,我给你发过去)好啦,2.6内核和4个升级工具都下载完了(少一个也不行,如果没有下载齐全,请不要尝试下面的步骤,升级是不会成功的),下面回到Linux系统中开始配置工作吧。
[A8]Powerlink linux移植方案及步骤_李璇
![[A8]Powerlink linux移植方案及步骤_李璇](https://img.taocdn.com/s3/m/1bfb479edaef5ef7ba0d3c10.png)
[A8]POWERLINK linux移植方案及步骤从官网下载openPowerlink源码。
源码中一般都有文档说明,介绍源码以及源码如何使用。
本文讲述powerlink向linux系统移植的方案及其步骤。
1、移植方案协议栈移植存在两种方式:内核模块和用户空间。
内核模块:协议栈作为内核一个模块而被执行,这种方式可提供最佳性能,但是需要匹配具体的网络驱动程序;用户空间:协议栈在用户空间运行,能够提供所有基于powerlink协议栈的功能。
协议栈借助于libpcap库访问网络接口(与具体的网络驱动程序对接),从而使得协议栈与网卡及其驱动独立开。
1.1 内核模块Powerlink移植到内核空间,作为内核模块,其各层程序如下图2.1所示。
图2.1 Powerlink在linux内核空间实现示意图在内核空间实现Powerlink,协议栈作为一个内核模块存在于内核中,需要根据所用的网卡,编写对应的驱动的程序,以供协议栈在内核使用。
在内核空间实现了一套用于调用协议栈的操作,再在用户空间将这些操作进行封装,形成和在用户空间实现相同的用户层接口(API),可方便应用层开发。
即针对向内核空间移植,powerlink源码提供了向上和向下的接口,屏蔽了用户空间和内核空间驱动调用接口。
上层应用程序调用源码向上的接口(EplApiLinuxUser.c)。
向下则匹配网络驱动。
为保证powerlink规范性,应该针对powerlink 提供向下的接口,修改或编写对于网络驱动的接口,使其对应。
另外,应用层应用程序也可在内核空间实现,即将所有实现全部在内核空间实现,这样就不需要内核空间与用户空间的一套接口,应用程序可直接调用协议栈在内核的操作。
但是,应用程序较大时会加大内核负担,而且若出现问题,在内核空间进行调试也比较困难。
1.2 用户空间Powerlink移植到用户空间,可与应用程序绑定,其各层程序如下图2.2所示。
图2.2 Powerlink在linux用户空间实现示意图采用了Libcap网络驱动库,底层网络只需通用驱动,即屏蔽了底层细节。
RedHat5 内核升级指南
![RedHat5 内核升级指南](https://img.taocdn.com/s3/m/3bccd1f3f90f76c661371a1c.png)
RedHat5.3 升级内核到2.6.33 版本错误:insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists编译2.6.31内核后重启出现insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists解决方法:1,解压initrd文件[root@bogon ~]# cp /boot/initrd-2.6.30.4.img /tmp[root@bogon ~]# cd /tmp/[root@bogon tmp]# lsinitrd-2.6.30.4.img[root@bogon tmp]# mkdir newinitrd[root@bogon tmp]# cd newinitrd/[root@bogon newinitrd]# zcat ../initrd-2.6.30.4.img |cpio -i11537 blocks释放之后看到如下内容[root@bogon newinitrd]# lsbin dev etc init lib proc sbin sys sysroot2,ok,下边就是编辑init,删掉其中重复的四行中的两行echo "Loading dm-region-hash.ko module"insmod /lib/dm-region-hash.koecho "Loading dm-region-hash.ko module"insmod /lib/dm-region-hash.ko3,重新打包initrd[root@bogon newinitrd]# find .|cpio -c -o > ../initrd11538 blocks[root@bogon newinitrd]# cd ..[root@bogon tmp]# gzip -9 < initrd > initrd.img[root@bogon tmp]# lsinitrd-2.6.30.4.img initrd initrd.img newinitrd好了,initrd.img就是重新打包的initrd了,然后把initrd.img拷贝到/boot,更改grub.conf里边的initrd-2.6.30.4.img为initrd.img就可以了,这样“insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists”就不会有了其实将init文件的第二行“setquiet”去掉,你就知道initrd文件到底在做什么了本文来自CSDN博客,转载请标明出处:/jinxl560/archive/2009/09/17/4563716.aspx。
Xen的超级调用
![Xen的超级调用](https://img.taocdn.com/s3/m/46c87adf49649b6648d74758.png)
在超级调用页中会调用到超级调用处理程序 hypercall,由 hypercall 根据超级调用表调用 相应的超级调用服务例程。图 10 为 x86-32 平台简化的超级调用页的初始化过程。
图 10:超级调用页的初始化
以下是和超级调用相关的源码,xen 的源码摘自 xen-3.2.0,linux 内核源码摘自修改过的 linux 内核 linux-2.6.18-xen。在超级调用页的初始化中是以 x86 的 32 位的 os 为例的,64 位 os 也是类似的调用过程,因为半虚拟化中 64 位的 os(只有两个环 0 环和 3 环)对应 0/3 环,0 环对应 xen,3 环对应 os 和应用程序,所以这种情况下超级调用页的初始化和 32 位 os 有差 异。
13
#define __HYPERVISOR_update_va_mapping 14
#define __HYPERVISOR_set_timer_op
15
#define __HYPERVISOR_event_channel_op_compat 16 /* compat since 0x00030202 */
图 7:系统调用中相关源码的位置
实际实现中,标准库的封装函数可能会根据需要调用宏_syscall0~_syscall5, 其中 0~5 对应需要系统调用的参数个数(系统调用号除外)。在宏的内部调用了软中断指令 int 0x80。 系统调用的参数会通过寄存器进行传递,通常系统调用号保存在 eax 中,其余参数则保存在 ebx,ecx,edx,esi 和 edi 中。
3.超级调用(hypercall)的引入
为了使 os 使用 xen 所拥有的特权指令,xen 提供了超级调用(hypercall)接口给 os。半 虚拟化中,超级调用和操作系统提供给应用程序使用的系统调用概念类似。不同之处在于,xen 使用 82 中断号,而系统调用使用 80 中断号。图 4 为没有虚拟化的 os 和半虚拟化中系统调用和 超级调用的位置。在 xen 的 Domain 支持类型中除了 PV 和 HVM 外,还存在一种管理模式内核 (supervisor model kernel),目前还不清楚它的用途。在这种 Domain 中,xen 和 os 同处在 0 环,应用程序在 3 环。由于超级调用和系统调用概念很类似,我们首先回顾一下未虚拟化的 linux 操作系统中系统调用的知识。
linux 2.6 kernel移植到QEMU Mips的源代码文档.
![linux 2.6 kernel移植到QEMU Mips的源代码文档.](https://img.taocdn.com/s3/m/4513a8f9aef8941ea76e0510.png)
Port Linux 2.6 Kernel to Qemu MipsAuthor: Joy Tang2009.1Version 1.02Overview•Use open source to study, no confidential information inside.•If we need deep view inside linux, we must understand what kernel do.•This doc is for build up mips for linux environment run on X86 emulator machine.I, Build Kernel•Target•Main CPU: QEMU emulate Mips•Cross Compile:mips-linux•Develop Environment: Red Hat•Notes, QEMU also support melta board, and MIPSsim. Reference web page: https:///mailarchive/git-commits-head/2008/1/29/636729/thread, from version linux 2.6.25, it remove qemu mips inside.Prepare Working•Prepare Working:•Download source code of Linux:•Annymos login •Go to the folder "/pub/linux/kernel/v2.6" inside FTP.•Get the source code:tar -jxvf linux-2.6.22.19.tar.bz2•2.6.21 will be another choice.Add Toolchain to Search Path•vi /etc/profile, add following lines•PATH="$PATH:/opt/hardhat/devkit/mips/lexra_fp_b e/bin"•PATH="$PATH:/opt/hardhat/devkit/mips/lexra_fp_b e/target/bin"•PATH="$PATH:/opt/build_mips_nofpu/mips-uClibc-linux/usr/bin“•…Change Makefile•vi Makefile, search SUBARCH•Change toSUBARCH := mips•Find CROSS_COMPILE, change toCROSS_COMPILE ?= mips-linux-•vi arch/mips/Makefile, search cflags-y:=, if it is cflags-y:= mips1, change it to cflags-y:=•The change base on user itself environment.Start to Build, Step1•Make config or make menuconfig or make xconfig •Change CPU to QEMU•Add support for “Initial RAM filesystem and RAM disk”. (Initial RAM filesystem and RAM disk (initramfs/initrd) support (BLK_DEV_INITRD) [N/y/?] n change to Y)•Change many other settings, such as MAP_RAM, MTD support, MTD_PLATRAM•Attach .config file for reference. (end of this doc)•File system analyses•In company file system, there are 4 mtds, •1, busybox=> mtd1•2, kernel=>mtd2•3, workdir=>mtd3•4, jffs etc folder=> mtd4•This step will mount all this 4 files.•Change source:go to drivers/mtd/maps.•Run cp cfi_flagadm.c qemuflash.c•Change linux/drivers/mtd/maps/Kconfig, find config MTD_CDB89712, after it, addconfig MTD_QEMU_EMUFLASHtristate"gggggg qemu emu flash”•Also change Makefile under linux/drivers/mtd/maps/ Find obj-$(CONFIG_MTD_CDB89712)+= cdb89712.o, after it, addobj-$(CONFIG_MTD_QEMU_EMUFLASH)+= qemuflash.o•See attach (makefile& kconfig, end of this doc)•For the file, qemuflash.c, there is some comments:•mtd0,mtd1, mtd2 is not used. Mtd3 is for workdir, mtd4 is for jffs etc folder.•Here is attach. (end of this doc)•Go to folder \fs\jffs2, open earse.c, line 350, function jffs2_block_check_erase, add a qemu patch#ifdef CONFIG_QEMU#elseprintk(KERN_WARNING"Newly-erased block ……#endif•Goto root folder, run make config, press enter until it quit. This is for correct errors in the file “.config”•Run build commandmake all•Run commandcp -f ./vmlinux/opt/emularor/qemu/mips/myimages2…After that, kernel elf file will be send to qemu folderII, Build Qemu•Download qemu packet on web/qemu/download.html•Get the file /qemu/qemu-0.9.1.tar.gz •Uncompress it. In order to save time, inside file config-host.mak: change TARGET_DIRS to mips-softmmu.•Open root folder\vl.c•Add following lineschar g_mtdFileName_etcSave[1024];char g_mtdFileName_workdir[1024];•At beginning of main function, addmemset(g_mtdFileName_etcSave, 0, 1024);memset(g_mtdFileName_workdir, 0, 1024);At the end of function drive_init, add following lines if (type == IF_PFLASH && g_mtdFileName_etcSave[0] == 0){//mtd will load to bios mem, save file name firstsprintf(g_mtdFileName_etcSave, "%s", file);}if (type == IF_MTD && g_mtdFileName_workdir[0] == 0){//mtd will load to bios mem, save file name firstsprintf(g_mtdFileName_workdir, "%s", file);}•Go to “hw”folder, open mips_r4k.c, add following lines •extern char g_mtdFileName_etcSave[1024]; //2M •extern char g_mtdFileName_workdir[1024]; //30M•#define START_ADDR_ETC_SAVE 0x1fc00000•#define SIZE_ETCSAVE 0x00200000•#define START_ADDR_WORKDIR 0x1fe00000•At the end of function, mips_r4k_init, add following lines, add processing of g_mtdFileName_etcSave andg_mtdFileName_workdir.Build QEMU Step 3(continue) if (g_mtdFileName_etcSave[0]){bios_offset= ram_size+ vga_ram_size;bios_size= load_image(g_mtdFileName_etcSave, phys_ram_base+ bios_offset);if ((bios_size> 0) && (bios_size<= BIOS_SIZE))cpu_register_physical_memory(START_ADDR_ETC_SAVE,BIOS_SIZE, bios_offset| IO_MEM_ROM);else/* not fatal */ fprintf(stderr, "qemu: Warning, could not load MIPS bios '%s'\n",buf);}if (g_mtdFileName_workdir[0]){bios_offset= ram_size+ vga_ram_size+ SIZE_ETCSAVE;bios_size= load_image(g_mtdFileName_workdir, phys_ram_base+ bios_offset);if ((bios_size> 0) && (bios_size<= BIOS_SIZE))cpu_register_physical_memory(START_ADDR_WORKDIR,BIOS_SIZE, bios_offset| IO_MEM_ROM);else/* not fatal */fprintf(stderr, "qemu: Warning, could not load MIPS bios '%s'\n",buf);}Attach mips_r4k.c, end of this doc•Open root folder sysemu.h, change 4m to 32m#define MAX_BIOS_SIZE (32 * 1024 * 1024)…#elif defined(TARGET_MIPS)#define BIOS_SIZE (32 * 1024 * 1024) //we want use bios ram to be mtd area #endif•Here is attach file for it. (end of this doc)•Run following command: ./configuremakemake installIII, Build busybox •Find web /downloads/, choose/downloads/busybox-1.6.1.tar.bz2•Uncompress it.•Change make file, like the build kernel,•vi Makefile, search SUBARCH•Change toSUBARCH := mips•Find CROSS_COMPILE, change toCROSS_COMPILE ?= mips-linux-Build busybox Step2•make xconfig•Change settings for it, make sure the mount & fdisk is inside.•make\n•make install\n•cd./_install\n•rm dev -rf\n•cp /opt/source/flashmaster_prxxx_fe-1.0.linux-2.6-2/res/1.0/rootfs.mips_nofpu/dev/ ./dev -rf\n•cd-\n•cp -f --reply=yes /opt/source/flashmaster_prxxx_fe-1.0.linux-2.6-2/res/1.0/rootfs.mips_nofpu/sbin/portmap ./_install/sbin\n•../flashmaster_prxxx_fe-1.0.linux-2.6-2/bin/mkcramfs -Nb_install/ a.mtd\n •cp -f --reply=yes a.mtd../emulator/qemu/mips/\nIV,MTD files, step 1•There are 4 MTD files in real system, now we design each to a file,•A, MTD1, it will be busy-box => -initrd“filename”•B, MTD2, it will be kernel=>-kernel “filename”•C, MTD3, it will be workdir=>-mtdblock“filename”•D, MTD4, it will jffs2 format etc/save=>-pflash“filename”•MTD files Step 2•For 1st, busybox, run following command to create it cd/opt/…/flashmaster_prxxx_fe-1.0.linux-2.6-2/res/1.0 mkdir rootfs.mips_nofpu/dev/netmknod rootfs.mips_nofpu/dev/net /tun c 10 200chmod0666 rootfs.mips_nofpu/dev/net /tun../../bin/mkcramfs -Nb rootfs.mips_nofpu a.mtd•or directly use exist one “mtd1.img”.•For 2nd, use build kernel file “vmlinux”•For 3rd, use workdir•For 4th, run following command../../bin/mkfs.jffs2 -o etcsave.mtd-d ./etc -e 65535 -p ff -bComments of MTD•For 1st, parameter –initrd use it as ram-disk. It will loaded to ram of qemu memory space.•For 2nd, parameter –kernel use same concept of 1st.•For 3rd, it emulate a flash, it start address will be 2M, 0x1fc00000 + 0x00200000, size 30M, 0x01E00000•For 4th, its start address will be 0M0x1fc00000 + 0x0000000, size 2MV, Create script fileto run kernel •Its contentsinitarg="init=/linuxrc root=/dev/hda root2=/dev/hd18" mtdparameter="-mtdblock./boot/workdir.mtd“pflashparameter="-pflash./boot/etcsave.mtd“time \${qemupath}qemu-system-mips\-kernel ./myimages2/vmlinux \-initrd a.mtd\-append "console=ttyS0 $initarg" \-nographic\-m 128 \$pflashparameter\$mtdparameter\-net nic,vlan=1 -net user,vlan=1Comments for the script file•-nographic can be removed. If it is exist, qemu emulator will not show command console, we can use secure-crt’s SSH2 account to do this.•If it is not exist, we must run under x window in linuxAdd function for readphysical memory in QEMU •Add a function in monitor.c, do_phymemory_save •Detail is in attachment monitor.cFor run qemu command•Use graphic, ctrl+alt+2•Run command•Here is help:•help|? [cmd] --show the help•commit device|all--commit changes to the disk images (if -snapshot is used) or backing files •info subcommand --show various information about the system state•q|quit--quit the emulator•eject [-f] device --eject a removable medium (use -f to force it)•change device filename --change a removable medium•screendump filename --save screen into PPM image 'filename'•logfile filename --output logs to 'filename'•log item1[,...] --activate logging of the specified items to '/tmp/qemu.log'•savevm tag|id--save a VM snapshot. If no tag or id are provided, a new snapshot is created •loadvm tag|id--restore a VM snapshot from its tag or id•delvm tag|id--delete a VM snapshot from its tag or id•stop --stop emulation•c|cont--resume emulation•gdbserver[port] --start gdbserver session (default port=1234)•x /fmt addr--virtual memory dump starting at 'addr'•xp/fmt addr--physical memory dump starting at 'addr'•p|print/fmt expr--print expression value (use $reg for CPU register access)•i /fmt addr--I/O port read•sendkey keys --send keys to the VM (e.g. 'sendkey ctrl-alt-f1')•system_reset--reset the system•system_powerdown--send system power down event•sum addr size --compute the checksum of a memory region•usb_add device --add USB device (e.g. 'host:bus.addr' or 'host:vendor_id:product_id')•usb_del device --remove USB device 'bus.addr'•cpu index --set the default CPU•mouse_move dx dy[dz] --send mouse move events•mouse_button state --change mouse button state (1=L, 2=M, 4=R)•mouse_set index --set which mouse device receives events •wavcapture path [frequency bits channels] --capture audio to a wave file (default frequency=44100 bits=16 channels=2)•stopcapture capture index --stop capture•memsave addr size file --save to disk virtual memory dump starting at 'addr' of size 'size'•pmemsave addr size file --save to physical memory memory dump starting at 'addr' of size 'size'VI,Study on mount cd iso,harddiskand share files•1)For mount hda and cdrom correctly, we need open following kernel options:•A, ATA IDE support option.•B, VFS support•C, CDROM ISO9660 file system support•(“make xconfig”to find&open it. Recompile and build kernel again)•2)Go to /dev folder inside root file system prepare folder, run following command:•mknod hdc b 22 0•3)inside run-qemu script file, add•-cdrom./cd.ISO-hda linux.img.•(cd.ISO can be any cdrom iso file, linux.img copy fromhttp://lassauge.free.fr/qemu/release/Qemu-0.9.1-windows.zip. ./share is a folder for share between qemu and host x86 linux system)•4)After all file prepared, in qemu kernel, test this:•mount /dev/hda/tmp3 => hda will be linux.img’s data•mount /dev/hdc/tmp4 => hdc will be cdrom’s dataMount(continued)Now I want to share data with vmware. Here is steps to share data with vmware:1, inside vmware, create a IDE harddisk disk, select persistent and independent. Minimum size is 0.1GB, (100MB). Suppose it use hdd inside vmware, its file name is “vmware-qemu-flat.vmdk”. When generate it, choose a special folder for it. It is for share purpose.2, let the share folder inside a folder /mnt/hgfs. (The other topic, vmware tools.)3, inside vmware, run command: fdisk/dev/hdd. Use “n”command to create a new partition.4, inside vmware, run mkfs/dev/hdd. Then vmdk file is formatted. Copy new vmdk file to qemu’s folder, suppose it is “./share”. Make sure don’t format other partition inside vmware. ☺5, add parameter in run qemu-mips-system script: -hda/mnt/hgfs/share-qemu/vmware-qemu-flat.vmdk. Start the qemu-mips-system. Use this command in vm: mount /dev/hda/tmp3.6, With upper steps, the vmdk file can be share between qemu and vmware. It will be useful to share files.7, Before transfer the vmdk files between vmware and qemu, pls run “sync”. It is for write buffer’s data. “sync”may not enough. Maybe need “poweroff”VII. GDB for debug kernel•Step1, need re-build kernel. Run “make xconfig”, open many options in “kernel hacking”, such as “compile kernel with debug info”etc.After compile, we can find kernel image size change from about 4m to about 20m. This is normal.•Step2,use X window linux, in command script, remove –nographic, add a paramter–S, it is for stop kernel and wait for gdb command.•Step3, after qemu window start, you will see black screen but press Ctrl-Alt-3 to see bash prompt. Press Ctrl-Alt-2, go to qemu command window, press “gdbserver”, at this time, qemu will start to listen port 1234.•Step4, start another linux terminal, run “mips-linux-gdb vmlinux”, in gdb, run command “(gdb)target remote localhost:1234”, you will find gdb can trace kernel now.VIII network1, host preparation in linux •From /progDownload/tunctl-Download-41592.html download tunctl-1.5.tar.gz•Comment 2 lines,•#docbook2man $(PACKAGE).sgml•#install $(MAN) $(DESTDIR)$(MAN_DIR)•make•make install•Find if host linux kernel have “tun.ko”•[root@...~]# find /lib -name "tun.ko"•/lib/modules/2.6.9-22.EL/kernel/drivers/net/tun.konetwork•Goto guest kernel folder, run “make xconfig”•Find “network device support”=> “other ISA cards”=>”ne2000/ne1000 support”, open it.•Re-compile your guest kernel after the change.network•-----------------------------------------"create /usr/local/sbin/tap.sh file (e1000g0 is network card label, this file is at host) -----------------------------------------#!/bin/sh•IF=e1000g0•TAP=tap0•case "$1" in•"start")•sudo tunctl-t $TAP•ifconfig$TAP plumb•brdgadm-a $IF•brdgadm-a $TAP•;;•"stop")•#brdgadm-d $IF•#brdgadm-d $TAP•ifconfig$TAP unplumb•sudo tunctl-d $TAP•;;•esac•exit 0•------------------------------------# /usr/local/sbin/tap.sh start## /usr/local/sbin/tap.sh stop------------------------------------network•After run “tap.sh start”on host of linux, we check if tun.ko is probed: “lsmod | grep tun“,•tun 9153 0•And also we check if tap0 device is power up,•ifconfig –a, we can find a new device tap0 is power on.•We can run following command in host linux:“ifconfig tap0 192.168.200.1“.•Create a file, vi /etc/qemu-ifup#!/bin/shifconfig$1 192.168.200.10Network2, guest•Add following string to qemu-run script:•-net nic,vlan=1,macaddr=00:aa:00:00:01:01 -net tap,vlan=1,ifname=tap0•Startup qemu-system-mips by the added script file.•In guest linux shell, run:•ifconfig eth0 192.168.200.11•ping -c 4 192.168.200.1 to check if network is ok.Network error•I meet this error:•# ping -c 3 192.168.200.10•PING 192.168.200.10 (192.168.200.10): 56 data bytes•NETDEV WATCHDOG: eth0: transmit timed out•NETDEV WATCHDOG: eth0: transmit timed out•---192.168.200.10 ping statistics ---• 4 packets transmitted, 0 packets received, 100% packet loss•After I change this file, arch/mips/kernel/i8259.c , I solve the issue on guest linux2.6.21.•add .disable = disable_8259A_irq,on line 39•[root@localhost linux-2.6.21.7]#diff ./arch/mips/kernel/i8259.c ./arch/mips/kernel/i8259_test.c•39d38•< .disable = disable_8259A_irq•Reference web for the patch:•/mm-commits@/msg24505.html or •/Mailing-Lists/Kernel/2007-07/msg12733.html3, Network prepare inhost Windows XP host system•1, go to /BBS/thread-3209-1-1.html, download tapnic.rar.•After click “addtap.bat”, a new driver for virtual XP network is generated. Please rename it to tap0.•Reference web http://www.h7.dion.ne.jp/~qemu-win/TapWin32-en.html.XP windows hostprepare for network •Force IP address of tap0:Windows XPprepare•Run this command for windows XP:•qemu-system-mips.exe-L . -m 192 -kernel .\myimages2\vmlinux -initrd a.mtd-append "console=ttyS0 init=/linuxrc root=/dev/hda pci=noapicisa=noapic" -M mips-cdrom./cd.ISO-hda./share/vmware-qemu-flat.vmdk-net nic,vlan=1,macaddr=00:aa:00:00:01:01 -net tap,vlan=1,ifname=tap0,vlan=1,ifname=tap0•Guest OS preparation same as upper mentioned hostlinux+guest linux.Rootfs changefor the network•In order to mount nfs server on host linux or windows host, I add nfs support in guest kernel option, but still cannot mount nfs folder.•Later I add follow lines in rc.sysinit and solve the unable mount issue.ifconfig lo 127.0.0.1netmask255.0.0.0 broadcast 127.255.255.255 portmapmount -t ramfs ramfs/tmp-o maxsize=4000More Host Preparationfor Network•1, windows, for NFS work, need install cygwin, make sure NFS module is installed. We need edit “C:\cygwin\etc\hosts”and “C:\cygwin\etc\exports”for NFS setting•2, Linux, make sure NFS work. It is at “start menu”=>”system setting”=> “server setting”=> “nfs setting”Malta board(Mips24k)& Graphics study•MTD_PHYSMAP need to be closed.•Because Malta board has graphics card support, now I start to study malta board.•1) get svn code from internet:•svn co svn:///qemu/trunk•2)don’t change anything on qemu code like before because there is a crash on change code and I find workdir also can be mounted on /dev/hdc. Also don’t need to change guest kernel code, it can be optional.•3)copy malta/.config to guest kernel folder. Build guest kernel with 2 commands: make config, make allMalta (continue)•4, create a script file, my-run-qemu without graphic support(in attachment, /malta/script) and another script file, graphics-qemu with graphic support. •run the graphic script file. For malta board, we don’t need change arch/mips/kernel/i8259.c like the fake qemu board.•Under guest linux, run “mount /dev/hdc/tmp3”to check if workdir is mounted on /tmp3.Some capture imageon malta platform•Graphic display after press “ctrl+alt+1”•After run some command, network mount is working.Futher topic & summerize•There are still 1 important topics Emulate every device inside Mips chip.•That’s all•Because pdf file don’t support *.rar file asas attachment, pls rename the txt to rar.。
Linux2.6内核移植系列教程
![Linux2.6内核移植系列教程](https://img.taocdn.com/s3/m/1dd2cd6225c52cc58bd6bebe.png)
Linux2.6内核移植系列教程第一:Linux 2.6内核在S3C2440平台上移植此教程适合2.6.38之前的版本,其中2.6.35之前使用同一yaffs补丁包,2.6.36--2.6.28 yaffs文件系统有所改变,2.6.39之后的暂时不支持,源码下载请到:/1.解压linux-2.6.34.tar.bz2源码包#tar jxvf linux-2.6.34.tar.bz22.修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修改ARCH ? =armCROSS_COMPILE?=/usr/local/arm/4.3.2/bin/arm-linux-注意:交叉编译器的环境变量也需要改为4.3.2#export PATH=/usr/local/arm/4.3.2/bin/:$PATH其中ARCH变量用来决定:配置、编译时读取Linux源码arch目录下哪个体系结构的文件PATH 用来决定交叉编译器版本3.修改机器类型ID号Linux源码中支持多种平台的配置信息,内核会根据bootloader传进来的mach-types决定那份平台的代码起作用,本人手里的板子是仿照三星公司官方给出的demo板改版而来,所以采用arch/arm/mach-s3c2440/mach-smdk2440.c此配置文件,打开此文件,翻到最后,有以下信息:MACHINE_START(S3C2440, "SMDK2440")/* Maintainer: Ben Dooks <ben@> */.phys_io= S3C2410_PA_UART,.io_pg_offst= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,.boot_params= S3C2410_SDRAM_PA + 0x100,.init_irq= s3c24xx_init_irq,.map_io= smdk2440_map_io,.init_machine= smdk2440_machine_init,.timer= &s3c24xx_timer,MACHINE_ENDMACHINE_START(S3C2440, "SMDK2440")决定了此板子的mach-types,可以在以下文件中找到S3C2440对应的具体数字,"arch/arm/tools/mach-types"文件查找S3C2440,362,这里刚好与我们的bootloader相同,所以不用做修改,直接保存退出即可,如果不同则根据bootloader的内容修改此文件,或根据此文件修改boorloader的内容(在vivi中可通过param show查看,u-boot在Y:\test\u-boot_src\u-boot_edu-2010.06\board\samsung\unsp2440\unsp2440.c文件:gd->bd->bi_arch_number = MACH_TYPE_S3C2440;中决定)。
LINUX-2.6内核移植过程中常见问题及解决方法
![LINUX-2.6内核移植过程中常见问题及解决方法](https://img.taocdn.com/s3/m/43a2b8f79e314332396893d0.png)
LINUX-2.6内核移植过程中常见问题及解决方法1、内核启动后,出现如下提示后停住UNCOMPRESSING LINUX........................................................... DONE, BOOTING THE KERNEL一般情况下,这个时候内核已经启动了,只不过在控制台CONSOLE中没有打印信息而已。
所以问题主要锁定在串口这一块。
首先确定你的板子包括硬件都是没有问题的。
可以分以下几种情况,最常见的原因是在内核启动命令行这块CMDLINE,一般情况下LINUX-2.4内核中,CONSOLE=TTYS0,而LINUX-2.6内核则用CONSOLE=TTYSAC0。
还有一个原因,不多见,我当时用的是S3C2410的板子,BOOTLOADER用的是U-BOOT-1.0.0,内核移植的是LINUX-2.6.16,结果出现这个问题,在网上查了很多资料,最后找出来问题。
U-BOOT把S3C2410的时钟设置为202MHZ,而内核启动时使用的是200MHZ,修改U-BOOT中的MPLLCON:CLK_POWER->MPLLCON MPLLCON = 0X0005C040;//MPLL=200MHZ2、内核编译成功后,启动后出现如下提示后就停住了。
FREEING INIT MEMORY: 72KWARNING: UNABLE TO OPEN AN INITIAL CONSOLE.这个也是控制台CONSOLE的问题,LINUX-2.6.13以后的内核都支持DEVFS,而之后版本的内核就把DEVFS这块去掉了,虽然还能在内核源码中找到对应的源码,你也可以把它加进内核,但是也不是太好用。
2.6.13 后的版本改为支持UDEV了,UDEV这块我也没太弄懂,正在研究。
因此如果你是LINUX-2.6.13版本一下的内核,编译的时候在PSEUDO FILESYSTEMS添加DEV FILESYSTEM SURPPORT选项,也就是添加DEVFS的支持,如果LINUX-2.6.13之后的版本,你就看看你的ROOTFS下有没有/DEV/CONSOLE这个文件,没有的话,自己做一个就可以#MKNOD CONSOLE C 5 13、内核启动后,打印出一大堆提示信息UNABLE TO HANDLE KERNEL XXXX POINTER DEREFERENCE AT VIRTUAL ADDRESS XXXXXX ……R10: 00000000 R9 : 00000000 R8 : 00500001R7 : 00000001 R6 : C011AB50 R5 : C3726C00 R4 : C013E024R3 : 00000000 R2 : 00000000 R1 : 00000000 R0 : C3726C00….<0>KERNEL PANIC - NOT SYNCING: ATTEMPTED TO KILL INIT!这个提示是内核启动加载驱动时出错,那就只有找到出错的驱动,不加载它,如果必须要用这个驱动,只有自己修改源代码,一般问题都在对硬件的地址操作有问题。
查看linux系统版本命令
![查看linux系统版本命令](https://img.taocdn.com/s3/m/392256010622192e453610661ed9ad51f01d540a.png)
查看linux系统版本命令一。
查看内核版本命令:1) [root@SOR_SYS ~]# cat /proc/versionLinux version 2.6.18-238.el5 (mockbuild@) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-50)) #1 SMP Sun Dec 19 14:22:44 EST 2010[root@SOR_SYS ~]#2)[root@SOR_SYS ~]# uname -r2.6.18-238.el53)[root@SOR_SYS ~]# uname -aLinux SOR_ 2.6.18-238.el5 #1 SMP Sun Dec 19 14:22:44 EST 2010 x86_64 x86_64 x86_64 GNU/Linux[root@SOR_SYS ~]#二。
查看linux版本:1) 登录到服务器执行 lsb_release -a ,即可列出所有版本信息,例如:[root@SOR_SYS ~]# lsb_release -aLSB Version: :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarchDistributor ID: RedHatEnterpriseASDescription: Red Hat Enterprise Linux AS release 4 (Nahant Update 4)Release: 4Codename: NahantUpdate4[root@SOR_SYS ~]#注:这个命令适用于所有的linux,包括Redhat、SuSE、Debian 等发行版。
浅谈Linux操作系统的安全毕业论文
![浅谈Linux操作系统的安全毕业论文](https://img.taocdn.com/s3/m/ce735cd51eb91a37f1115cef.png)
毕业设计(论文)题目: 浅谈linux操作系统的安全姓名学号专业系部指导教师目录第一章Linux操作系统概述 (1)1.1 Linux发展历史 (1)1.1.1 Linux的诞生和发展 (2)1.1.2 Linux名称的由来 (2)1.2 Linux的发展要素 (3)1.2.1 UNIX操作系统 (3)1.2.2 Minix操作系统 (4)1.2.3 POSIX 标准 (4)1.3 操作系统类型选择和内核版本的选择 (4)1.3.1 常见的不同公司发行的Linux异同 (5)1.3.2内核版本的选择 (9)1.4 Linux的系统架构 (10)1.4.1 Linux内核的主要模块 (10)1.4.2 Linux的文件结构 (12)1.5 GNU通用公共许可证 (13)第二章Linux与其他操作系统的比较 (15)2.1 Linux与UNIX的异同 (15)2.2 Linux和Windows的区别以及安全性的比较 (16)2.3 Linux与其他操作系统的区别 (18)2.4 Linux与其他系统的总体比较总结 (119)2.5 Linux与Windows根本比较—内核 (21)2.6 Linux的特性 (23)2.7 Linux与其他操作系统的区别 (25)第三章Linux的安全性能分析以及增强 (27)3.1 嵌入式Linux 的特点 (27)3.2 嵌入式Linux 现有安全机制及分析 (29)3.3 嵌入式Linux 安全缺陷 (31)3.4 小结 (33)结束语 (34)参考文献 (37)附录 (38)第一章Linux操作系统概述Linux系统是一个类似UNIX的操作系统,Linux系统是UNIX在微机上的完整实现。
UNIX操作系统是1969年由Ken Thompson 和Dennis Ritchie在美国贝尔实验室开发的一种操作系统。
由于其良好而稳定的性能迅速在计算机中得到广泛的应用,在随后几十年中也有了不断的改进。
描述Linux内核的移植过程
![描述Linux内核的移植过程](https://img.taocdn.com/s3/m/ff5b1a5fae1ffc4ffe4733687e21af45b307fec6.png)
描述Linux内核的移植过程
Linux内核的移植过程可以分为以下几个步骤:
1. 确定目标平台:首先需要确定要将Linux内核移植到哪个目标平台上,这个平台可以是嵌入式设备、服务器、桌面电脑等。
2. 获取源代码:从Linux官网或其他开源代码库获取Linux内核的源代码。
3. 配置内核:根据目标平台的硬件特性和需求,对内核进行配置。
可以使用make menuconfig、make xconfig或make config等命令进行配置。
4. 编译内核:使用交叉编译工具链对内核进行编译。
交叉编译工具链是一组针对特定平台的编译器、链接器、调试器等工具,可以在开发主机上编译生成目标平台上的可执行文件。
5. 生成镜像文件:将编译生成的内核、设备树、启动程序等文件打包成一个镜像文件。
镜像文件的格式可以是uImage、zImage、vmlinux等。
6. 烧录镜像文件:将生成的镜像文件烧录到目标平台的存储设备上,例如闪存、SD卡、硬盘等。
可以使用dd、fastboot、flash等命令进行烧录。
7. 启动内核:将目标平台连接到开发主机,通过串口或网络连接进行调试和启动。
可以使用bootloader或者直接从存储设备启动内核。
8. 调试内核:在目标平台上运行内核时,可能会遇到各种问题,例如驱动不兼容、内存泄漏、死锁等。
需要使用调试工具对内核进行调试,例如gdb、kgdb、strace等。
以上就是Linux内核的移植过程,需要根据具体的目标平台和需求进行调整和优化。
Redhat及linux内核之间版本的对应关系
![Redhat及linux内核之间版本的对应关系](https://img.taocdn.com/s3/m/16615e81dd3383c4bb4cd236.png)
RHEL 4 Update 1————————————2.6.9-11
RHEL 4 Update 2————————————2.6.9-22
RHEL 4 Update 3————————————2.6.9-34
RHEL 4 Update 4————————————2.6.9-42
由于Redhat和CentOS的发行版本现在众多,所以我们应该知道CentOS和Redhat及linux内核之间版本的对应关系对维护系统还是很有帮助的。对应的列表如下:
Redhat 9.0———————————————2.4.20-8
RHEL 3 Update 8————————————2.4.21-47
CentOS 5.6/RHEL 5 Update 6——————2.6.18-238
CentOS 5.7/RHEL 5 Update 7——————2.6.18-274
CentOS 5.8/RHEL 5 Update 8——————2.6.18-308
CentOS 5.9/RHEL 5 Update 9——————2.6.18-348
4.7 i386, x86-64 4.7 2.6.9-78 13 September 2008[30] 24 July 2008[31] 51
4.8 i386, x86-64 4.8 2.6.9-89 21 August 2009[32] 18 May 2009[33] 95
4.9 i386, x86-64 4.9 2.6.9-100 2 March 2011[34] 16 February 2011[35] 14
4.5 i386, x86-64, IA-64 4.5 2.6.9-55 17 May 2007[27] 1 May 2007 16
Linux Boot文件或分区丢失损坏修复笔记
![Linux Boot文件或分区丢失损坏修复笔记](https://img.taocdn.com/s3/m/f76c8980ec3a87c24028c462.png)
BOOT 丢失损坏修复
首先
我把系统下BOOT先备份,然后rm -rf /boot/*
reboot
实验开始
1,报错界面如下
2,我放第一张光盘进入linux rescue 模式下
chroot /mnt/sysimage
cd /var/ftp/pub/Server/ (这里是我放软件包的路径)
rpm -ivh -force kernel-2.6.18-8.e15.i686.rpm
3,再次进入linux rescue 模式,由于我刚刚重新安装了kernel
这时候你可以cd /boot/ ls 看看有什么文件
接你就可以安装initrd
mkinitrd initrd-2.6.18-8.el5.i686.rpm 2.6.18-8.el5
4,因为你安装了内核后不一定就会有grub存在,所以还会要安装GRUB
5,安装GRUB后可以进去看看。
里面不会有grub.conf 这个文件所还是需要自己手动去写。
接下来我们就开始写grub.conf这个文件,一般情况下我建议用echo命令输出。
vim /boot/grub/grub.conf
title Red Hat Enterprise Linux5
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/
initrd /initrd-2.6.18-8.el5.img。
linux移植的一般过程
![linux移植的一般过程](https://img.taocdn.com/s3/m/2ea1383ef02d2af90242a8956bec0975f465a4c1.png)
linux移植的一般过程
1.硬件平台的分析:对要移植的硬件平台进行分析,了解其处理器架构、内存结构、设备接口等硬件特性。
2. 内核选择和配置:根据硬件平台的特性选择相应的Linux内核版本,并进行配置,包括启用或禁用某些功能、添加驱动程序等。
3. 引导程序开发:根据硬件平台的启动方式,开发或适配引导程序(bootloader),负责加载内核和设备驱动程序。
4. 设备驱动程序的开发或适配:根据硬件平台的设备特性,开发或适配相应的设备驱动程序,使其能够被内核识别和使用。
5. 文件系统的制作:根据硬件平台的存储设备特性,制作相应的文件系统,包括文件系统类型、文件系统结构、文件系统大小等。
6. 应用程序的移植:根据硬件平台的特性,移植相应的应用程序,确保其能够正常运行。
7. 调试和优化:进行测试和调试,解决可能出现的问题,并优化系统性能。
8. 发布和维护:完成移植后,进行发布和维护工作,包括文档编写、系统更新等。
- 1 -。
Mini2440下移植媒体播放器MadPlayer
![Mini2440下移植媒体播放器MadPlayer](https://img.taocdn.com/s3/m/c982f5bef121dd36a32d82a2.png)
Mini2440下移植媒体播放器MadPlayer全过程开发环境:操作系统:readhat linux5 版本:2.6.18-164.el5硬件平台:mini2440(友善之臂)gcc交叉编译环境:arm-linux-gcc-4.4.3.tar.gz版本:gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)一、mp3 播放器madplay移植过程1.准备文件如下文件(从网上下载)arm-linux-gcc-4.4.3.tar.gz(交叉编译gcc所用到文件)madplay-0.15.2b.tar.gz(madplay移植所用到文件)libmad-0.15.1b.tar.gz(madplay移植所用到文件)libid3tag-0.15.1b.tar.gz(madplay移植所用到文件)zlib-1.2.5.tar.gz(lib库所需要的文件)libstdc++.so.6.0.10(版本问题所需要的链接)2.打开虚拟机,由于版本问题需要进行如下操作1)删除/usr/lib/libstdc++.so.6文件(#rm /usr/lib/ libstdc++.so.6)2)把下载文件libstdc++.so.6.0.10复制到/usr/lib/下(#cplibstdc++.so.6.0.10 /usr/lib/)3)(#cd /usr/lib/)4)建立链接(#ln–s /usr/lib/libstdc++.so.6.0.10 /usr/lib/libstdc++.so.6)5)查看链接是否成功(#strings /usr/lib/libstdc++.so.6 | grep GLIBCXX)如下图3.建立交叉编译环境1)将arm-linux-gcc-4.4.3.tar.gz压缩文件复制到/tmp(#cp arm-linux-gcc-4.4.3.tar.gz /tmp)2)解压缩文件arm-linux-gcc-4.4.3.tar.gz(#tar xvzf arm-linux-gcc-4.4.3.tar.gz –C /)cd3)修改文件分别在/root/.bashrc和/etc/profile文件下添加如下一行export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin(#gedit /root/.bashrc)和(#gedit /etc/profile)如下图:保存并退出4)重新登录系统交叉编译环境生效(在字符界面用命令logout,在图形界面直接<注销>)5)重新登录后在命令行输入#arm-linux-gcc-4.4.3–v显示如下图交叉编译成功(可以编写一个c程序测试生效)4.播放器移植1)在根目录如下文件/opt/FriendlyARM/下建立mini2440,并在mini2440文件夹下建立madplay,再在madpalay文件夹下建立四个文件夹tarball src-x86 src-arm target-arm (#cd /opt/FriendlyARM/)(# mkdir mini2440)(#cd mini2440)(#mkdirmadplay)(#cd madplay)(#mkdirtarball src-x86 src-arm target-arm)2)把压缩包madplay-0.15.2b.tar.gzlibid3tag-0.15.1b.tar.gzlibmad-0.15.1b.ta r.gz放入/opt/FriendlyARM/mini2440/madplay/tarball(#cpmadplay-0.15.2b.tar.gz libid3tag-0.15.1b.tar.gzlibmad-0.15.1b.tar.gz /opt/FriendlyARM/ mini2440/ madplay/ tarball )3)解压缩源代码madplay-0.15.2b.tar.gzlibid3tag-0.15.1b.tar.gzlibmad-0.15 .1b.tar.gz(#cd /opt/FriendlyARM/ mini2440/ madplay/ tarball)(#for f in $(ls *.tar.gz); do tar xvzf $f –C ../src-x86 ; done)4)编译madplay所依赖的库文件a) libid3tag(#cd/opt/FriendlyARM/mini2440/madplay/src-x86/libid3tag-0.15.1b)(#./configure--prefix=/opt/FriendlyARM/mini2440/madplay/target-x86)(#make)(#make install)b) libmad(#cd/opt/FriendlyARM/mini2440/madplay/src-x86/libmad-0.1 5.1b)(#./configure--prefix=/opt/FriendlyARM/mini2440/madplay/target-x86)(#make)(#make install)由于gcc版本问题需要删除/opt/FriendlyARM/mini2440/madplay/target-x86/libmad-0.15.1b/Makefile文件中的"-fforce-mem"字符串(#cd /opt/FriendlyARM/mini2440/madplay/target-x86/ libmad-0.15.1b/)(#geditMakefile)以上过程完毕,将在target-x86 目录出现编译madplay所依赖的库文件和头文件。
ubuntu 10.04 编译安装最新版本linux-2.6.34内核
![ubuntu 10.04 编译安装最新版本linux-2.6.34内核](https://img.taocdn.com/s3/m/cc0bbd4ce518964bcf847cee.png)
build-essential (基本的编程库(gcc, make等)
kernel-package (Debian 系统里生成 kernel-image 的一些配置文件和工具)
libncurses5-dev (meke menuconfig要调用的)
libqt3-headers (make xconfig要调用的)
第五步:更新配置GRUB引导列表
sudo gedit /boot/grub/grub.cfg
我的grub.cfg添加如下:
menuentry ‘Ubuntu 10.04,Linux 2.6.34′ –class ubuntu –class gnu-linux –class gnu –class os {
initrd /initrd.img-2.6.34
}
#以下是原2.6.32内核启动项
menuentry ‘Ubuntu,Linux 2.6.32-22-generic’ –class ubuntu –class gnu-linux –class gnu –class mod ext2
set root=’(hd1,9)’
search –no-floppy –fs-uuid –set 501d3a42-1d52-4438-99bf-e679da605867
linux /vmlinuz-2.6.32-22-generic root=UUID=33883099-83a5-49f3-9c12-ee6a4d90da9e ro quiet splash
######################################
完成上述操作后,重启系统,选新内核启动,会弹出一个小英文窗口,先选择grub update grub …….(因为无法截图,记不清了,大概有这些字样)这一项来更新GRUB,然后再选最上面的一项,好象是resum字样的,不知道有没有记错,哈哈,请细心点吧。完成后重新启动电脑,GRUB菜单会更新成有好多启动项了,就象刚安装完UB10.04时一样,不过你可以登录系统后再修改/boot/grub/grub.cfg来简洁它。到此编译安装工作圆满成功,谢谢各位看官的支持!!!
嵌入式linux内核移植步骤
![嵌入式linux内核移植步骤](https://img.taocdn.com/s3/m/85c3f3851b37f111f18583d049649b6648d709bd.png)
嵌入式linux内核移植步骤嵌入式Linux内核移植步骤嵌入式Linux内核移植是将Linux内核移植到特定的硬件平台上的过程。
在进行嵌入式Linux内核移植之前,需要先了解目标硬件平台的相关信息,包括处理器架构、硬件接口、设备驱动等。
本文将介绍嵌入式Linux内核移植的主要步骤,以帮助读者了解移植的过程。
1. 获取源代码需要从官方或其他可靠的渠道获取Linux内核的源代码。
可以选择下载最新版本的稳定内核,也可以根据需要选择特定版本的内核。
获取源代码后,解压到本地目录。
2. 配置内核在进行内核配置之前,需要根据目标硬件平台选择适当的配置文件。
内核配置文件包含了编译内核所需的各种选项和参数。
可以使用make menuconfig或make defconfig命令进行内核配置。
在配置过程中,需要根据目标硬件平台的特点进行相应的配置,如选择正确的处理器类型、设备驱动等。
3. 编译内核配置完成后,可以使用make命令编译内核。
编译过程可能会比较耗时,需要根据计算机性能进行相应的等待。
编译完成后,会生成vmlinuz和相关的模块文件。
4. 编译设备树设备树是描述硬件平台的一种数据结构,用于在内核启动时传递硬件信息给内核。
如果目标硬件平台需要使用设备树,需要将设备树源文件编译为二进制文件。
可以使用device tree compiler(dtc)工具来编译设备树。
5. 烧录内核内核编译完成后,需要将生成的vmlinuz文件烧录到目标硬件平台上。
根据硬件平台的不同,可以使用不同的烧录工具,如dd命令、fastboot等。
烧录完成后,可以通过串口或其他方式查看内核启动信息。
6. 配置文件系统内核烧录完成后,需要为目标硬件平台配置文件系统。
可以选择使用已有的文件系统,如busybox、buildroot等,也可以根据需求自行定制文件系统。
配置文件系统包括选择合适的文件系统类型、添加必要的应用程序和驱动、配置网络等。
Makefile&&Kconfig
![Makefile&&Kconfig](https://img.taocdn.com/s3/m/e9afd0d528ea81c758f5782e.png)
有了gcc 编译器下面我们就可以来编译我们的内核了,内核的下载地址是从这里来下载我们所想要的内核,我们现在用的是linux-2.6.18 内核。
Linux2.6内核新特性Linux内核吸收了一些新技术,在性能、可量测性、支持和可用性方面不断提高。
这些改进多数是添加支持更多的体系结构、处理器、总线、接口和设备;也有一些标准化内部接口,简化扩展添加新设备和子系统的支持。
与Linux2.4版本相比,Linux 2.6 版本具有许多新特性,内核也有很大修改。
其中一些修改只跟内核或者驱动开者有关,另外一些修改则会影响到系统启动系统管理和应用程序开发。
Linux 2.6 内核重要的新特性如下:(1) 新的调度器: O(1)(2) 内核抢占(3) 新的线程模型(4) 文件系统:access controls , ext2/ext3(5) 声音:ALSA(6) 总线:IDE,SCSI(7) 电源管理(8) 网络(9) 用户界面层(10) 统一的设备模型在 Linux 上我们可以用以下命令来下载内核。
[root@binnary ~]#wget –c/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 [root@binnary ~]#wget –c/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2.sign 新版本的内核分分两种:一种是完整源码版本(我们直接解压就可以使用)另一种是patch文件[root@binnary ~]#cd linux-2.6.18[root@binnary linux-2.6.18]#bzcat ../patch-2.6.14.bz2 | patch –p1patch命令可以根据补丁文件内容修订文件内容修改指定目录下的文件。
patch –p<n> < diff_filecat diff_file | patch –p<n>bzcat diff_file.bz2 | patch –p<n>zcat diff_file.gz | patch –p<n>其中,<n> 代表按照patch文件的路径忽略的目录级数,每个 ” / ” 代表一级。
Linux操作系统课件--第1次-Linux简介
![Linux操作系统课件--第1次-Linux简介](https://img.taocdn.com/s3/m/0a415626dc36a32d7375a417866fb84ae55cc357.png)
国内外常见的Linux发行版本
红旗Linux
openSUSE Linux
国内外常见的Linux发行版本
Ubuntu Linux
Red Hat Linux
国内外常见的Linux发行版本
Mandrake Linux
CentOS
Linux的特点
开放性
指系统遵循世界标准规范,特别是遵循开放系统互连(OSI)国际标准。
课程内容
Vi编辑器的使用 Linux的网络管理 Linux的安全管理
第1次 Linux操作系统概述
自由软件简介 L都in是ux自是由自软由件软。件的代表,运行在该系统上的应用程序几乎
自由软件含义
自由软件是指用户拥有以下三个层次自由的软件: ① 研究程序运行机制,源代码公开并根据用户自己的需要修改它 的自由; ② 重新分发拷贝,以使其他人能够共享软件的自由; ③ 改进程序,为使他人受益而散发它的自由;
支持多种文件系统
Linux的应用领域
桌面系统 服务器系统 嵌入式系统 超级计算机系统 游戏机系统
关于CentOS
CentOS,全称Community Enterprise Operating System,中文名为社区企业操作系统。
是一个基于Red Hat Linux 提供的可自由使用源代码的 企业级Linux发行版本。
Linux shell
shell是系统的用户界面,提供了用户与内核进行交互操 作的一种接口。它接收用户输入的命令并把它送入内核 去执行,是一个命令解释器。
Linux系统的组成
Linux文件系统
文件系统是文件存放在磁盘等存储设备上的组织方法。 Linux系统能支持多种目前流行的文件系统,如EXT2、 EXT3、FAT、FAT32、VFAT和ISO9660。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux-2.6.18移植有了我们的交叉编译环境和我们先前学的内核基础知识,下面我们就开始我们的内核移植了,我们所用的是博创的 S3C2410 。
关于 linux-2.6.18.tar.bz2 的下载网站先前我们说过,我们要先到该官方网站上去下载一个全新的内核。
[root@Binnary ~ ]# tar –jxvf linux-2.6.18.tar.bz2[root@Binnary ~ ]# make mrproper如果你是新下载的内核,那这一步就不用了。
但如果你用的是别人移植好的内核,那最好在编译内核之前先清除一下中间文件,因为你们用来编译内核的交叉编译工具可能不同。
第一步:修改Makefile文件将改为第二步:修改分区设置信息我们要先在BootLoader中查看相应的分区信息vivi>help然后修改内核源码中的分区信息。
分区信息文件在a rch/arm/mach-s3c2410/common-smdk.c将其中的改为如下内容:第三步:内核通过 BootLoader把数据写入NAND Flash,而vivi的ECC效验算法和内核的不同,内核的效验码是由NAND Flash控制器产生的,所以在此必须禁用NAND Flash ECC。
所以我们就要修改 drivers/mtd/nand/s3c2410.c 这个文件。
将中的 chip->ecc.mode = NAND_ECC_SOFT ,改为如下 chip->ecc.mode = NAND_ECC_NONE。
只此一处。
第四步:下面是devfs的问题,因为2.6.12内核以后取消了devfs的配置选项,缺少了它内核会找不到mtdblock设备。
所以我们需要修改 fs/Kconfig 文件,或者是从2.6.12的fs/Kconfig中拷贝下面几项到2.6.18的fs/Kconfig中去,我们采用修改的方法来完成。
修改 fs/Kconfig支持devfs 。
在Pseudo filesystems 主菜单的最后添加我们所要的内容。
第五步:文件系统的支持Yaffs 文件系统YAFFS文件系统简介YAFFS,Yet Another Flash File System,是一种类似于JFFS/JFFS2的专门为Flash设计的嵌入式文件系统。
与JFFS相比,它减少了一些功能,因此速度更快、占用内存更少。
YAFFS和JFFS都提供了写均衡,垃圾收集等底层操作。
它们的不同之处在于:(1)、JFFS是一种日志文件系统,通过日志机制保证文件系统的稳定性。
YAFFS仅仅借鉴了日志系统的思想,不提供日志机能,所以稳定性不如JAFFS,但是资源占用少。
(2)、JFFS中使用多级链表管理需要回收的脏块,并且使用系统生成伪随机变量决定要回收的块,通过这种方法能提供较好的写均衡,在YAFFS中是从头到尾对块搜索,所以在垃圾收集上JFFS的速度慢,但是能延长NAND的寿命。
(3)、JFFS支持文件压缩,适合存储容量较小的系统;YAFFS不支持压缩,更适合存储容量大的系统。
YAFFS还带有NAND芯片驱动,并为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD和VFS,直接对文件进行操作。
NAND Flash大多采用MTD+YAFFS的模式。
MTD( Memory Technology Devices,内存技术设备)是对Flash操作的接口,提供了一系列的标准函数,将硬件驱动设计和系统程序设计分开。
Yaffs 文件系统内核没有集成,可以对其主页下载:/cgi-bin/viewcvs.cgi/#dirlist建议下载 yaffs2 源码包,里面就支持了 yaffs 和 yaffs2 两种文件系统,把它添加进内核也很方便,有专门的脚本来处理。
以下是我在文坛上发过的贴,里面介绍了把 yaffs 文件系统支持添加进内核的全过程:添加对yaffs的支持,打补丁包名为:yaffs2.tar.gz[root@Binnary ~ ]# tar –zxvf yaffs2.tar.gz[root@Binnary ~ ]# cd yaffs2[root@Binnary yaffs2 ]# ./patch–ker.sh /usr/src/linux-2.6.18第六步:MTD 分区的支持到了 MTD 的支持,下面我们看一下存储设备。
所有嵌入式系统的启动都至少需要使用某种形式的永久性存储设备,即使是在引导过程的最初阶段。
大多数系统,包括嵌入式系统,仍会继续使用同一个存储设备来进行它的其余操作(执行程序代码或是存取数据)。
然而,与传统的嵌入式软件相比,在嵌入式系统中使用 Linux 对存储硬件的需求,不论就规模或结构来看都比较大。
下面让我们来看一下 Linux 支持的永久性存储设备。
MTD在 Linux 的术语中,memory technology device(存储技术设备,MTD)涵盖了所有存储设备。
如常见的ROM、RAM、flash 以及 M-Systems 的 DiskOnChip(DOC)。
这类设备的能力、特性和限制,各不相同。
因此,为了在自己的系统中编程和使用 MTD 设备,嵌入式系统开发者传统上会使用该类设备专属的工具和方法。
为了尽可能避免针对不同的技术使用不同的工具,以及为不同的技术提供共同的能力,Linux 内核纳入了 MTD 子系统。
它提供了一致且统一的接口,让底层的 MTD 芯片驱动程序无缝地与称为“用户模块”的较高层接口组合在一起,如下图所示,这些“用户模块”不应该跟内核模块或任何用户空间的软件搞混。
“MTD 用户模块”指的是内核中的软件组件,它们会借着提供可识别的接口和抽象层,让内核的较高层或用户空间能够存取底层MTD芯片驱动程序。
图:MTD 子系统MTD 芯片驱动程序必须向 MTD 子系统注册,方法是通过 mtd_info 结构给add_mtd_device()函数提供一组缺省的回调函数及属性。
MTD 驱动程序必须提供回调函数,让 MTD 子系统能够调用它来执行删除、读出、写入和同步等操作。
以下列出目前已经可以使用的 MTD 芯片驱动程序。
DiskOnChip (DOC)这是 M-Systems 公司DOC技术的驱动程序。
目前,Linux 支持 DOC 1000 、DOC 2000 和DOC Millennium。
Common Flash Interface (CFI)CFI是一个由 Intel、AMD 和其他 flash 制造商共同开发的规格。
所有与CFI兼容的flash 组件都会将它们的配置和参数直接存放在芯片上。
因此,它们的侦测软件接口,配置及使用能够标准化。
内核中内含侦测和支持CFI 芯片的程序代码。
因为CFI规格允许不同的芯片使用不同的命令,所以目前内核的支持包括了两个基本点不同芯片系列(Intel/Sharp和AMD/Fujitsu)所实现的两种指令集。
JEDECJEDC (Solid State Technology Association)是一个为 flash 芯片定义标准的组织,它还负责为此类设备分发识别编号。
尽管CFI的出现使得JEDC flash 标准被淘汰出局,不过目前仍旧存在与 JEDEC 兼容的芯片。
MTD 子系统支持此类设备的侦测和配置设定。
非 DOC 的 NAND flashNAND flash 是 M-systems 公司的DOC设备最普遍的规格。
然而,市场上还有其他类型的 NAND flash 芯片。
MTD 子系统对一些这种设备使用非DOC的驱动程序。
该驱动程序支持设备的完整列表,可参内核源码树中的include/linux/mtd/nand.ids.h文件。
旧式非CFI的flash有些 flash 芯片即不兼容CFI也不兼容JEDEC。
因此,MTD子系统会根据制造商的规格为此类设备提供驱动程序。
这种设备被支持的形式包括:非CFI 但与AMD兼容的 flash 芯片、pre-CFI 的Sharp 芯片,以及非CFI的JEDEC 设备。
然而,不要忘了,此类设备的更新并不如较常用的设备(如DOC或CFI 设备)来得频频。
RAM、ROM和不在系统上的芯片MTD子系统提供存取一段RAM、ROM芯片的驱动程序,并将它映射到系统的物理寻址空间,就像MTD设备一样。
因为此类芯片与系统的连接有些可能会使用插座或其他可让你移除芯片的类似接头,所以MTD子系统还提供一个驱动程序,可于从系统上移出设备时,用来保存MTD设备节点的注册顺序。
非缓存的RAM如果有任何系统RAM是CPU无法缓存的,在系统正常操作期间你可以将此内存当成MTD设备来使用。
当然,当你关掉系统的电源时,存放在这类媒体上的信息将会消失。
用于测试和评估的虚拟设备当你要为目标板上的设备加入或测试MTD的支持时,有时你可能会想要进行与芯片驱动程序无关的用户模块的操作测试。
为此目的,MTD子系统提供了两种可用来模拟实际MTD硬件的MTD驱动程序:其中一个驱动程序模拟MTD 设备的方式是使用系统的虚拟寻址空间提供的内存,另一个驱动程序模拟MTD设备的方式是使用一般的块设备。
因为不同的MTD设备在物理地址上并不会映射到相同的位置,所以MTD子系统需要使用经过裁剪的mapping驱动程序(映射驱动程序是一种特殊的MTD 驱动程序,它的主要任务是给MTD芯片驱动程序提供MTD设备在系统中的物理地址和一组存取这些设备的函数)以便检查及管理系统上的MTD设备。
有些系统和开发板知道MTD设备的配置,因此内核包含了此类系统专属的映射驱动程序,内核还包含了一般驱动程序,可用来存取系统上没有专属映射驱动程序的CFI flash 芯片。
如果系统的存储设备没有适当的映射驱动程序可用,可能需要以既有的映射驱动程序为蓝本自己建立一个新的。
你可以在内核源码树中的 drivers/mtd/maps/目录里找到既有的映射驱动程序。
如果其他的内核设备驱动程序,一个MTD芯片驱动程序可以管理同一种设备的多个实体。
如,系统上有两个与CFI兼容的 AMD flash 芯片,它们可以被 CFI 驱动程序的单一实体当成是两个不同的MTD设备来管理,不过这取决于设备。
为了让MTD设备里的存储空间易于定制。
MTD子系统还允许把存储设备划分成多个分区。
与硬盘分区非常像的是,每个MTD分区可以当成是独立的MTD设备来存取,在同一个设备上的不同分区可以使用完全不同的格式来存储数据。
实际上,存储设备通常会被划分成许多分区,每个分区的用途各不相同。
在我们为系统的存储设备设好MTD芯片驱动程序的配置后,每个MTD设备上的存储空间将可被一个MTD用户模块管理。
用户模块将会对它管理的MTD设备使用某种存储格式,以及提供较高层内核组件能识别的接口和抽象层。