linux内核实验0

虚拟机linux存放路径“E:\Users\Think\Documents\Virtual Machines\Red Hat Enterprise Linux 5”

解压: tar xjf xxx.tar.bz2
打补丁:patch -p1 <../linux-2.6.22.6_jz2440.patch
配置:① make menuconfig
            ② 使用默认配置。 寻找默认配置项find -name "*defconfig*"
            ③ 使用厂家提供的配置
配置的结果是生成一个.config文件
.config内容:
    CONFIG_xxx = y / n / M
    以DM9000为例:
        CONFIG_DM9000=y 表示内核支持这个网卡
    哪些地方会用到CONFIG_DM9000: grep "CONFIG_DM9000" * -nR
    ① c源码中:arch/arm/plat-s3c24xx/common-smdk.c:46:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
    ② 子目录中的Makefile:drivers/net/Makefile:197:obj-$(CONFIG_DM9000) += dm9dev9000c.o
                                                         CONFIG_DM9000 = y编进内核,=M 生成模块
                子目录makefile很简单:obj-y += xxx.o 会被编进内核
                                                            obj-m += xxx.o 会被编译成模块 xxx.ko
问题1:
    obj-y、obj-M 在编译时,过程是咋样的:
    http://19880512.blog.51cto.com/936364/303544
    http://blog.csdn.net/qxb1229/article/details/8594263
                            
    ③ include/linux/autoconf.h:145:#define CONFIG_DM9000 1 “必须配置后才能成才,例:make config_ok;由配置的.config生成”
                                        scripts/kconfig/.zconf.tab.o.cmd:72:    $(wildcard include/config/autoconfig.h) \
    ④ include/config/auto.conf:144:CONFIG_DM9000=y
            供子目录makefile用。被顶层目录makefile包含:Makefile:453:# If .config is newer than include/config/auto.conf, someone tinkered
            

make menuconfig中输入“?”号代表详细信息; “/”代表查找。


make uImage编译:

  OBJCOPY arch/arm/boot/Image
  Kernel: arch/arm/boot/Image is ready
  AS      arch/arm/boot/compressed/head.o
  GZIP    arch/arm/boot/compressed/piggy.gz
  AS      arch/arm/boot/compressed/piggy.o
  CC      arch/arm/boot/compressed/misc.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
    Image Name:   Linux-2.6.22.6
    Created:      Thu Mar  6 10:27:03 2014
    Image Type:   ARM Linux Kernel Image (uncompressed)
    Data Size:    1845824 Bytes = 1802.56 kB = 1.76 MB
    Load Address: 0x30008000                            //由uboot编译的工具mkimage工具决定
    Entry Point:  0x30008000
  Image arch/arm/boot/uImage is ready

分析:第一个文件:/arch/arm/kernel/head.S
            链接脚本:  /arch/arm/kernel/vmlinux.lds
编译的内核很大,可压缩很小的文件,压缩后的内核前有一段自解压代码。
                  jffs2文件是压缩文件

内核要做:① 处理uboot传入的参数[cpu、单板、页表、使能MMU、跳转start_kernel]  使能MMU参考--应用手册,这部分做了不少事情
                    ②start_kernel中    setup_arch(&command_line);setup_command_line(command_line);uboot传入的处理启动参数。
                    
                    运行应用程序,它放在根文件系统里面。挂接根文件系统,启动应用程序。

调用关系:
start_kernel
    setup_arch //解析uboot传入的启动参数
    setup_command_line
     rest_init();
        kernel_thread创建内核线程-kernel_init
             prepare_namespace();
                  mount_root();
             init_post();
                 //执行应用程序--由busybox生成
分区定义:Common-smdk.c (arch\arm\plat-s3c24xx)    6846
nand flash


解决问题:
有两种情况,会出现打开的文件都显示^M符号:
1. vim被配置为fileformat=unix,而你打开的文件都是dos格式的。
unix格式的换行符为0A(ascii码)也就是<LF>,dos格式的换行符为 0D 0A(也就是<CR><LF>),<CR>其实就显示为^M。
下面是详细讲解:DOS, Mac 和Unix格式的文件回想计算机的史前史,
那时的打字机使用两个字符来开始一个新行。
首先是一个字符命令使打印头移回开始位置(回车,<CR>),
然后另一个字符命令控制向前进纸一行(进纸,<LF>).在计算机诞生之初,存储设备十分昂贵。
于是有人就提出没有必要用两个字符来表示一行的结束。
UNIX一族决定只用进纸一个字符<LineFeed>来表示行尾。
来自苹果阵营的人则把回车<CR>作为换行的标准。
MS-DOS(和微软的Windows)仍然决定沿用古老的回车换行<CR><LF>传统。
这也意味着如果把文件从一个系统移到另一个不同的系统,你就会遇到与换行相关的问题。
Vim编辑器则可以识别这些不同格式的文件。
你可以在'fileformats'选项里指定你希望Vim能自动识别的格式的集合。
下面的这个命令就可以让Vim能自动识别UNIX格式和MS-DOS格式:
:set fileformats=unix,dos把这句话放在_vimrc中,一般情况就都能OK。
    在用户家目录(/home/用户名)下面有一个.vimrc
    /etc下面也有一个vimrc
    
    一般只改用户家目录下面的 .vimrc 此配置文件只针对用户有效
    更改后需使用su - 用户名 来使配置生效(例如 su - zhang3)
    
    .vimrc为隐藏文件  使用ls -al可查看

2. 你的文本中既有unix的换行符,又有dos的换行符,那么vim会认为你打开的是unix的,
所以,那些dos的换行符就会出现恼人的^M。不过这种情况不常见。
办法是:1)若你的vim版本大于7.1,并想用dos显示和保存,如下语句:
:e ++ff=dos
2)若你的vim版本小于等于7.1,又想把文章按照dos格式显示和保存,如下语句:
:set ff=dos:%s/\r\+$//e3)
若你的vim版本小于等于7.1,又想把文章按照unix格式显示和保存,如下语句:
:set ff=unix:%s/\r\+$//e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值