linux常见问题之系统移植的概念区分

时间:2022-04-07 16:10:38
1. 首先要清楚要让板子跑起来必须有三个文件:
        <1> u-boot ,系统引导,没有它系统起不来
        <2> kernel  , 内核
        <3> rootfs  ,根文件系统
    所谓移植就是把这三部分根据实际需求移植到板子上,让板子跑起来
2. 要明白并不是每次把u-boot 和kernel 等修改编译完了都要写到nandflash里面,完全可以现在内存里跑一下,在最后没问题的时候写到nan  dflash里,就是平时说   的产品定型了写到板子上,直接在板子上启动(突然想起去年的时候问我的同学怎么把程序写到板子里去,当时他还搞的很神秘,知道毕业都没告诉我,呵呵,其实就是写到nandflash里啦).
3. 先说在内存跑的:

   a. 烧写u-boot,先让引导系统跑起来
 
   
运行串口通信程序(putty)
  
Session ->Serial(选择usb通信)->Flow control->None
  
关闭开发板电源,将拨码开关SW1调至0001(usb启动模式)后打开电源
    (因为此刻板子里没系统引导程序u-boot ,所以要选择usb启动) 
     
启动dnw程序
   
Configuration  -> Options -> Download Address(0x2ff80000); 并设置串口与波特率
    
载运行 USB Installer_DDR2.bin
   USBPort à Transmit à Transmit,选中image目录下的USB Installer_DDR2.bin
    
加载运行 u-boot.bin
       
USBPort  à Transmit  à Transmit ,选中 image 目录下的 u-boot.bin
       
设置并保存环境变量

# printenv    // 查看环境变量的值并按如下设置

# setenv  baudrate 115200

# setenv  ethaddr  11:22:33:44:55:66

# setenv  gatewayip  192.168.1.1

# setenv  serverip  192.168.1.100       //  serverip要和虚拟机的ip相同

# setenv  ipaddr  192.168.1.200       // ipaddr也可以是192.168.1.x其他值

# setenv  netmask  255.255.255.0
      
保存环境变量
   
# saveenv
      
拷贝image/u-boot.bin到虚拟机/tftpboot目录下
  
  测试网络是否连通  //  只能通过u-bootping虚拟机
  
 #ping <serverip>
     之后通过网络从服务器下载u-boot.bin到内存:
      
#tftp  20008000  u-boot.bin
    
# nand  erase  0 40000

# nand  write  20008000 0  40000

关闭开发板电源,将拨码开关SW1调至0000(nand启动模式)后打开电源

b.
 通过网络加载内核和文件系统
 
# setenv  bootcmd tftp 20008000  zImage\; go  20008000

# setenv  bootargs root=nfs nfsroot=192.168.1.33:/source/rootfs  console=ttySAC0,115200init=/linuxrc  ip=192.168.1.200

# saveenv

 设置虚拟机

拷贝/image/zImage到虚拟机/tftpboot目录下

rootfs.tgz到虚拟机/source目录下

修改虚拟机nfs配置文件/etc/exports,添加如下内容并重启nfs服务

/source/rootfs *(rw,sync,no_subtree_check,no_root_squash)

$sudo /etc/init.d/nfs-kernel-server restart

(注意
 # setenv  bootcmd tftp 20008000  zImage\; go  20008000

 就是这句决定了内核在内存里跑的而不用写到nand里面 )

 c.
 重新启动开发板,u-boot自动加载、执行内核

4. 再说说 
nand flash加载内核和文件系统(也就是被我同学搞得很神秘的那部分了,呵呵)
    
拷贝rootfs.cramfs到虚拟机/tftpboot目录下

   烧写内核镜像到nand flash

   # tftp  20008000 zImage

   # nand  erase  100000  300000

  # nand  write  20008000  100000  300000

              烧写文件系统镜像到nand  flash

  # tftp  20008000  rootfs.cramfs

  # nand  erase  400000  400000

  # nand  write  20008000  400000  400000

 设置启动参数

 # setenv  bootdelay 3

 #setenv  bootcmd  nand read  20008000 100000  300000\;go 20008000

 #setenv  bootargs  root=/dev/mtdblock2  init=/linuxrc  console=ttySAC0,115200

 # saveenv

 重新启动开发板,u-boot自动加载、执行内核
(其实前面的都是先从服务器下载,再擦写nand的一段地址再写入到nand中,关键是
 
#setenv  bootcmd  nand read  20008000 100000  300000\;go 20008000

 这句决定了启动方式是从nand开始的 )