====================1.嵌入式软件层次


1.bootloader(u-boot)
   
2.linux内核
   
3.文件系统(NFS yaffs2)
   
   
====================2.u-boot的编译 


1.清除原有配置和中间文件
       make distclean
        
2. 配置开发板 (告诉u-boot,编译成的映像文件应该运行在什么开发板上)
      1.1 在Makefile里面搜索开发板名称,找到(开发板名称)_config
      1.2 make (开发板名称)_config  如:make mini2440_config
      
3. 编译
      make ARCH=arm  CROSS_COMPILE=arm-linux-
     


====================3.Linux内核编译


1.清除原有配置和中间文件
       make distclean  
           
2. 配置内核
      make menuconfig ARCH=arm("*"表示相应特性的支持或设备驱动程序编译进内核;"m"表示将相应特性的支持或设备驱动程序编译成可加载模块)
      
        1.System Type 选择为对应的芯片型号
        2.自行添加其他配置项(一般参照已有的.config文件)
         详细配置参照
        生成.config文件
        
3. 编译内核
      make uImage ARCH=arm CROSS_COMPILE=arm-linux-
      
        1.如果编译报错 "mkimage" command not found.      mkimage:用于给内核加上头
           在u-boot目录中复制mkimage到根目录的bin目录下
            cp/u-boot/tools/mkimage  /bin
            
        2.如果在自己的/u-boot/tools/没有找到mkimage
            原因在于编译u-boot的时候没有执行make distclean.
            在u-boot下执行make distclean,再次编译即可.
            
        3. 如果编译过程中出现非法路径 如: "/home/s5-driver/lesson8/rootfs"       
             3.1使用vim 或者 gedit 打开内核目录下得 .config文件
             3.2 搜索 : CONFIG_INITRAMFS_SOURCE 
             3.3 CONFIG_INITRAMFS_SOURCE = "xxxxxxx" 
                  修改"xxxxxx"为自己的rootfds目录
                   或者直接删除"xxxxx"中的xxxxx路径
4.复制内核映像文件到tftpboot文件目录下
      cp arch/arm/boot/uImage /tftproot
      
      1.生成的内核映像文件位于 arch/arm/boot/uImage
      
      2.tftpboot目录查看办法
            2.1  vim/etc/xinetd.d/tftp  配置tftp服务器  
            2.2  找到server :  后面的路径下的文件就是tftp服务器的根文件目录
            
5.这样,启动开发板, 通过tftp下载方式下载内核,就能启动内核.
 不过由于还没有挂载文件系统会报错.
  
 
==================4. 挂载文件系统(NFS)  


1. 建立根文件系统目录和文件
      1.1 mkdir rootfs 
      1.2 cd rootfs
      1.3 mkdir bin dev etc lib proc sbin sys usr mnt tmp var
      1.4 mkdir usr/bin usr/lib usr/sbin lib/modules
      1.5 创建设备文件  
                   cd rootfs/dev  (内核启动必须要的两个设备文件)
                   mknod -m 666(设备权限) console(控制台) c(字符设备) 5(主设备号) 1(次设备号) 
                   mknod -m 666 null c 1 3
      1.6 给根文件系统添加配置文件(与硬件平台无关) /etc : 目录包含各种系统配置文件
                   复制etc.tar到Linux操作系统,并解压
                   cp etc/* /rootfs/etc/ -tf(复制etc下的所有内容到/rootfs/etc/下)
      1.7 给根文件系统添加内核模块
                   编译: make modules ARCH=arm CROSS_COMPILE=arm-linux-
                   安装: make modules_install ARCH=arm INSTALL_MOD_PATH=/自己的rootfs目录/
      1.8 编译/安装busybox  (实现linux操作系统的一些命令)
                   复制busybox.tar到Linux操作系统,并解压 
                   配置busybox : 
                                 make menuconfig 
                                 选中 : Busybox Settings -> build Options-> Build busybox as a static binary 静态链接
                                        Busybox Settings -> build Options-> Cross Compiler prefix (arm-linux-) 申明交叉工具链                                        
                                        Installation Options-> Don‘t use /usr  避免安装到pc机下
                                        Installation Options-> Busybox Installation Prefix (/xxx/rootfs)  // busybox的安装位置
                   编译busybox :  
                                 make
                   安装busybox : 
                                 make install (实际是拷贝过程)                                
2.挂载根文件系统(NFS 基于网络,方便调试)                  
      2.1 配置内核文件
                      make menuconfig ARCH=arm
                      1. 如果选中了initramfs的文件系统,需要取消
                      2. File systems -> (选中) Network File Systems ->(选中)root file system on NFS  
                      
      2.2 重新编译内核
                      make uImage ARCH=arm CROSS_COMPILE=arm-linux- 
      
      2.3 设置启动参数  
                   参数说明:  
                      192.168.1.3   (tftp服务器地址,也就是linux_pc机ip地址)  
                      192.168.1.6   (tftpke客户机ip地址,开发板ip地址)
                      192.168.1.1   (网关地址)
                      255.255.255.0 (掩码)
                      /home/S5-driver/lesson9/rootfs   (rootfs的路径)
                   设置指令:  
                     setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.1.3:/home/S5-
                     driver/lesson9/rootfs ip=192.168.1.6:192.168.1.3:192.168.1.1:255.255.255.0::eth0:off
      2.4 配置/启动PC机的nfs
                   vi /etc/exports  : 修改为任何ip地址可以访问*(), 修改根文件系统的目录
                   重启NFS  : /etc/init.d/nfs restart