通过pmon启动内核相关命令
网络加载:
load tftp://server‐ip/vmlinux
initrd tftp://server‐ip/initrd.gz
g console=tty console=ttyS0,115200
u 盘启动:
load (usb0,0)/vmlinux
initrd (usb0,0)/initrd.gz
g console=tty console=ttyS0,115200
命令解释:
命令: load
格式: load <elf‐file>
解释: load 命令是 PMON 中一个很重要命令。作用是加载一个 elf 文件到内存中(这里只是存放到内存中,而没有烧写到flash中),加载过程是一个自动根据elf文件的信息处理elf文件重定向的等等操作的总体过程,所以这里不需要指定加载的内存地址,load命令会自动完成。
如:load tftp://server‐ip/vmlinux
如上命令,是从网络 tftp 服务器中加载内核到内存中。
如:load /dev/mtd0b
如上命令, 是从 nandflash 的第一个分区开始处中加载一个elf文件到内存中,这里一般存放着内核,这也是加载内核的另一种方法。
注:这里的 vmlinux 是一个 elf 文件,如果指定加载的文件不是 elf 文件,将提示错误。
命令: initrd
格式: initrd <img file>
解释: 加载initrd image
命令: g
格式: g [‐s][‐b bpaddr][‐e addr][‐‐args]
解释: g 命令是 PMON 中一个很重要的命令,直接从指定内存地址处开始执行程序
如:g –e addr
如上命令,直接从内存地址 addr 处开始执行程序,正常操作前提是在 addr 开始处的内存中已经存放了一个可执行的程序,addr 是这个程序的入口地址,如我们知道内存地址0x80010000 是 pmon 代码段存放开始地址, 执行 g –e 0x80010000 将会从新执行pmon 代码, 相当于了重启 PMON (这时不会从 flash 中拷贝执行 pmon)
load tftp://server‐ip/vmlinux
g console=ttyS0,115200 rdinit=/sbin/init
如上命令和 load 命令配合使用,在 load 完成后,使用 g 命令自动从加载后的内核入口地址开始执行内核,这是 g 后面在参数 “console=ttyS0,115200 rdinit=/sbin/init”是内核启动的参数。
跟启动相关的环境变量
跟启动相关的环境变量有 al1, rd, append,分别对应内核,initrd 路径及启动参数,例如
可以设置为:
set al1 /dev/mtd0
set rd /dev/fs/yaffs2@mtd1/initrd.gz
set append console=tty console=ttyS0,115200
命令解释:
命令: set
格式: set [name] [value]
解释: 查看 pmon 中的环境变量,设置环境变量 name 为 value
如: set (查看显示 pmon 中所有的环境变量) ;
set wk kkk (添加或者修改环境 wk 的值为 kkk)
pmon 烧写内核及文件系统到 nand 方法
烧写之前需要擦除,命令如下:
mtd_erase /dev/mtd0r //0 代表分区,r 后缀代表擦除不跳过坏快
mtd_erase /dev/mtd1r
devcp tftp://server‐ip/vmlinux /dev/mtd0
devcp tftp://server‐ip/roofs‐yaffs2.img /dev/mtd1y
set al1 /dev/mtd0
set append console=ttyS0,115200 rdinit=/sbin/init root=/dev/mtdblock1 rw
rootfs=yaffs2
命令解释:
命令: devcp
格式: devcp <src‐device> <desc‐device>
解释: devcp 命令应该是 PMON 中比较重要的命令。
其实现是:打开 src‐device 和 desc‐device 两个设备,从 src‐device 读取一定数量的字节数据,写到 desc‐device 设备中去,完成后关闭这两个设备。
如:devcp tftp://server‐ip/vmlinux /dev/mtd0
如上命令,从 tftp 服务器中接收读取内核 vmlinux,写到 nandflash 的第一个分区中,这是常用的烧写内核到 flash 中一个常用命令
如:devcp tftp://server‐ip/roofs‐yaffs2.img /dev/mtd1y
如上命令,从 tftp 服务器中接收读取根文件系统的 yaffs2 镜像文件 rootfs‐yaffs2.img
烧写到 nandflash 的第二个分区中。这是常用的烧写 yaffs2 文件系统到 nandflash 中的一个常用命令。
命令: mtdparts
格式: mtdparts
解释: 显示 nandflash 的现在分区信息。
命令: mtd_erase
格式: mtd_erase <mtd‐device>
解释: 擦除 nandflash 的一个分区
(擦除 nandflash 的第一个分区,跳过已经是坏块的地方,不会尝试擦除已经是坏块的地方);
mtd_erase /dev/mtd0r
(擦除 nandflash 的第一个分区,这时会尝试擦除所有的块,即使是坏块也会尝试执行擦
除操作)。
pmon 下查看及修改 dtb
Pmon 命令行支持,查看、删除、重新烧写 dtb。
Pmon 下查看 dtb 命令:
Print_dtb / 打印出 dtb 所有内容
Print_dtb /soc/dc@0x400c0000 打印出 dc 的所有内容
Pmon 下删除 dtb
rm_dtb_node / 删除整个 dtb
rm_dtb_node /soc/hda@0x400d00000 删除 had 内容
pmon 下重新烧写 dtb
dtb 会把内存大小信息传递给内核,如果这部分内容传递错误会造成不可预知错误。如果重新烧写内部部分内容,需要通过 print_dtb 命令把内存部分内容读出,更新到新的 dts 文件中(3号处理器不传递内存信息)。
在 pmon 编译目录下执行 make dtb 会生成 Bonito3a3000_7a.dtb 文件。此文件可单独烧写。
烧写命令和 烧写pmon一致
其他命令简介
命令: d1
格式: d1 <addr> <num>
解释: display 简写
按无符号字符型(unsigned char)访问显示 num 个从地址 addr 开始的内容值。
如:d1 0x85000000 0x10
显示从内存地址 0x85000000 地址处的 0x10 个字节(8 位),0x85000000‐0x8500000f
命令: d2
格式: d2 <addr> <num>
解释: display 简写
按 (unsigned short) 访问显示 num 个从地址 addr 开始的内容值。
如: d2 0x85000000 0x10
显示从内存地址 0x85000000 地址处的 0x10 个 unsigned short 类型(16 位)的数值,0x85000000‐0x8500001e
命令: d4
格式: d4 <addr> <num>
解释: display 简写
按(unsigned long)访问显示 num 个从地址 addr 开始的内容值。
如: d4 0x85000000 0x10
显示从内存地址 0x85000000 地址处的 0x10 个 unsigned long 类型(32 位)的数值,0x85000000‐0x8500003c
命令:d8
格式: d8 <addr> <num>
解释: display 简写
按 (unsigned long long) 访问显示 num 个从地址 addr 开始的内容值。
如: d8 0x85000000 0x10
显示从内存地址 0x85000000 地址处的 0x10 个 unsigned longlong(64 位)类型的数值, 0x85000000‐0x85000078
命令: m1
格式: m1 <addr> <value>
解释: modify 简写
按无符号字符型(unsigned char)访问修改地址 addr 的内容值。
如: m1 0x85000000 0x10
修改内存地址 0x85000000 地址处的一个 unsigned char 型值相当于:*(unsigned char*)addr = value;
命令: m2
格式: m2 <addr> <value>
解释: modify 简写
按无符号字符型(unsigned short)访问修改地址 addr 的内容值。
如: m2 0x85000000 0x10
修改内存地址 0x85000000 地址处的一个 unsigned short 型值相当于:*(unsigned short*)addr = value;
命令: m4
格式: m4 <addr> <value>
解释: modify 简写
按无符号字符型(unsigned long)访问修改地址 addr 的内容值。
如: m4 0x85000000 0x10
修改内存地址 0x85000000 地址处的一个 unsigned long 型值相当于:*(unsigned long*)addr = value;
命令: m8
格式: m8 <addr> <value>
解释: modify 简写
按无符号字符型(unsigned long long)访问修改地址 addr 的内容值。
如: m8 0x85000000 0x10
修改内存地址 0x85000000 地址处的一个 unsigned long 型值相当于:*(unsigned long long*)addr = value;
命令: devls
格式: devls
解释: 查看 pmon 的部分设备, 这里显示出来的设备不是全部的设备。
一般会有网卡, USB,CF 卡,sd 卡,硬盘等等,主要用查看设备的名字,以供其他操作的使用。
命令: ifaddr
格式: ifaddr <interface> <ipaddr>
解释: 设置网卡的 IP 地址,如:ifaddr syn0 192.168.0.1 (syn0 是网卡的名字,可以使用 devls 命令查看获得,这里不用设置子网掩码,pmon 会自动设置子网掩码为255.255.255.0)
命令:ping
格式: ping <ipaddr>
解释: 简单检测,如:ifconfig syn0 (syn0 是网卡的名字,可以使用 devls 命令查看获得)
命令: unset
格式: unset <name>
解释: 去掉名字为 name 的环境变量。关于环境变量的讲解参看附录 PMON 环境变量