编译版本之实用篇1119.docx
《编译版本之实用篇1119.docx》由会员分享,可在线阅读,更多相关《编译版本之实用篇1119.docx(14页珍藏版)》请在冰豆网上搜索。
![编译版本之实用篇1119.docx](https://file1.bdocx.com/fileroot1/2023-6/1/d6b7dd24-23d0-4b17-8dc8-a6c63ea66d43/d6b7dd24-23d0-4b17-8dc8-a6c63ea66d431.gif)
编译版本之实用篇1119
CSM开发环境建立之实用篇
---------基于Lilei同学的新手入学篇
Author:
HZ8312boyuanliu
Timestamp:
2008/11/11
1、基本准备1
2、开始编译用户代码1
3、编译后的一些特殊处理2
4、编译rootfs2
5、编译userfs2
6、上板2
7、升级4
8、更新userfs的特定部分6
9、杂七杂八6
10、GDB的使用9
11、配置mibbrowser调试环境(现在默认有值,可不做)10
12、新系统的关键宏定义:
10
1、基本准备
类似10.4.37.210的编译服务器一台、代码一份、telnet工具一个、tftp工具一个。
运行代码总体分为:
板卡模式(直接在板卡上运行,和以前系统类似)
NFS模式(使用服务器代码,利用mount服务)
2、开始编译用户代码
登录名:
xxxx,psw:
123456,进入
/home/liuboyuan/HZ08312_B1205_OAM_SERVER/B1200_CSM/icm/build/icm3目录下
依次执行
./buildplatform2.4.20csm1a
./buildapps2.4.20csm1a
./buildscm2.4.20csm1a
或者直接执行
./buildall2.4.20csm1a
可能会碰到permissiondenied的情况,请使用sudo./buildxxxx2.4.20csm1a进行编译。
3、编译后的一些特殊处理
由于现在的代码是基于debug版本,所以有些地方要做特殊处理。
上面的步骤做完之后,
3.1保存icm\apps\build\nmgt\lib.mpc下的libsnmp.so,后面要用到。
3.2备份好之后删除icm\apps\build\nmgt\bin.mpc和icm\apps\build\nmgt\lib.mpc两个目
录,重新执行:
./buildnmgt2.4.20csm1a。
3.3如果编译不过去,提示snmp_trace找不到之类,请重新执行3.2,直到成功为止。
3.4把libsnmp.so放回原来的地方,在编译userfs的时候要用。
3.5编译scm不用做特殊处理。
4、编译rootfs
进入/home/liuboyuan/HZ08312_B1205_OAM_SERVER/B1200_CSM/icm/rootfs目录下
./build_rootfscsm1a
编译kernel目录下的东西。
如果出现permissiondenied,请使用sudo
5、编译userfs
进入/home/liuboyuan/HZ08312_B1205_OAM_SERVER/B1200_CSM/icm/install目录下
sudo./make_userfs1.0.0.1(版本号,随意)
由于我们系统不使用upgrade,所以编译userfs时,所有有关upgrade的错误可以不理
会,但是如果缺少其他文件,那就是前面apps或者plat中编译有错误,重新编译。
最终生成的images都在B1200_CSM/icm/install/目录下,分别是rootfs.jffs2,userfs.jffs2,
用于板卡烧录,对应的目录是rootfs和userfs,可用于远程文件系统。
6、上板
csm1a板的串口波特率:
115200;
上电后,5秒内按ctrl+c进入uboot命令行方式下,第一次开机需设置以下参数:
(通过moduleentity可以提取出来)
bdinfoset00x1110123456789a
bdinfoset00x1210A1
bdinfoset00x03160123456789abcdefg
bdinfoset00x04102008-08-21
bdinfoset00x0510hz21071
bdinfoset00x0610UTS
bdinfoset00xFF000
bdinfosetFc1MacAddr00:
E0:
8E:
00:
01:
25
bdinfosetFc2MacAddr00:
E0:
8E:
00:
01:
26
bdinfosetBrgMacAddr00:
E0:
8E:
00:
01:
26
setenvipaddr10.4.41.166//板卡的ip
setenvgatewayip10.4.41.254//板卡网关ip
setenvserverip10.4.37.210//开NFS和TFTP的虚拟机的ip
{
setenvlinux_rootpath/home/csm/B1200CSM/B1200_CSM/icm/install/rootfs//mount的目录
setenvlinux_bootfilevmlinux1//kernel文件名
}可以不做
saveenv
然后直接在uboot下输入:
Updaterootfs烧录rootfs
Updateuserfs烧录userfs
重起板卡,自动启动,就可以正常用了。
NFS模式:
首先设置编译服务器内容:
修改rootfs/etc/rc.d/init.d/mountrd脚本,注释掉mount用户分区。
#mount-tjffs2/dev/mtdblock/1/usr/local
修改rootfs/usr/local/etc/init.d/start_apps脚本,注释掉防火墙配置。
echo"Configuringfirewall"
#/usr/local/etc/init.d/rc.icm2
App启动脚本位于/usr/local/etc/init.d/start_apps,可以修改以免自动运行hip和rmp。
根据下图,你可以按需要执行你要运行的组件
再设置板卡内容:
setenvipaddr10.4.41.166//板卡的ip
setenvgatewayip10.4.41.254//板卡网关ip
setenvserverip10.4.37.210//开NFS和TFTP的虚拟机的ip
setenvlinux_rootpath/home/csm/B1200CSM/B1200_CSM/icm/install/rootfs//mount的目录
setenvlinux_bootfilevmlinux1//kernel文件名
saveenv
runlinux_nfs_run
更新代码很方便,只需要重新设置serverip和linux_rootpath就可以使用不同的代码了。
7、升级
编译升级文件,编译修改后的nmgt或者scm、hip,不需要再进行文件位置的移动:
在B1200_CSM/icm/install/目录下运行脚本
make_package_csm1a1.0.0.0,生成csm1a_upgrade.gz。
正常结果:
[liuboyuan@10install]$sudo./make_package_csm1a1.0.0.1
cp:
cannotstat`../apps/upgrade/cfg_upgrade':
Nosuchfileordirectory
chmod:
cannotaccess`tmp/cfg_upgrade':
Nosuchfileordirectory
cp:
omittingdirectory`..//'
ppc_82xx-strip:
cfg_upgrade:
Nosuchfileordirectory
把编译出来的csm1a_upgrade.gz上传至节点:
telnet登陆节点,随便哪个目录下都可以执行:
icm2_upgrade/tftpbootcsm1a_upgrade.gz–f,如下:
root@10.20.30.1:
~#icm2_upgrade/tftpbootcsm1a_upgrade.gz-f
unzipsuccessful
newversionis1.0.0.1
old_versionis1.0.0.1
Upgrading..............................nmgtnotmatch.........
........................................start_appsnotmatch...........................
Done
root@10.20.30.1:
~#
notmatch的意思是upgrade.gz中的文件和板卡上的文件不匹配,就是需要更新的文件
可以看出来是否更新了你修改的文件。
该升级更新的文件列表在install下file_list_csm1a中。
不更新rootfs
8、更新userfs的特定部分
只适用于NFS模式。
在/home/liuboyuan/HZ08312_B1205_OAM_SERVER/B1200_CSM/icm/build/icm3下执行
如下脚本:
,命令格式为:
updatebcm
updatenmgt
updatescm
updateplatform
updatehip
多数情况nmgt、scm、hip为我们自己手动复制文件即可,其它两种bcm和platform由于涉及文件较多,所以建议使用这种方法升级。
如果要更新platform,则执行./buildplatform后,执行updateplatform。
如果需要更新bcm,则执行./buildapps后,updatebcm,之后同上。
9、杂七杂八
经常会碰到的问题,总结如下:
1、现象:
walk有的时候会卡住
原因:
sanity进程把cpu抢占100%,导致其它操作无响应
解决办法:
直接在板卡上注释掉etc/rc.d/init.d/dhcpd中的两行
/usr/bin/sanity_check&
/usr/bin/sanity_check&
由于dhcpd是存在于rootfs上,所以如果不更新rootfs的情况下,不需要重新修改。
2、现象:
直接启动后登陆不上去
原因:
没有配置ip地址和路由
解决办法:
在CSM下执行shifconfigeth010.230.9.253netmask255.255.255.0
shrouteadddefaultgw10.230.9.254eth0
或者更改//usr/local/upgrade/start_nmgt_dhcp,在sleep25后面加上
ifconfigeth010.230.9.253netmask255.255.255.0
routeadddefaultgw10.230.9.254eth0,这样每次重起就不用再设置了。
但是更新.gz后是需要重新配置的。
3、现象:
GDB连不上
原因:
防火墙开启
解决办法:
运行/etc/init.d/rc.flush即可
4、现象:
TFTP上传不上去
原因:
iptables的管理权限不是root
解决办法:
执行chownroot/usr/sbin/iptables
5、现象:
启动过程中出现iptablespermissiondenied
原因:
没有使用root用户编译rootfs
解决办法:
执行chownroot/usr/sbin/iptables
6、配置虚板的话,在nmgt侧可以使用moduleentity中的provisionstate查看,如果想
查看scm侧的虚板状况,可以在当前CSM下(串口上的CSM,默认进入到hip)输入dlbd0,查看板卡信息。
7、现象:
凡是发现和ip相关的不通现象,首先考虑防火墙,执行命令iptables–L
看看结果是什么。
8、单独编译不包含debug的NMGT
以前我们使用的buildnmgt2.4.20csm1a是编译debug版本的nmgt,现在不能用了,
如果想单独编译nmgt,可以在apps/build/nmgt下,执行以下脚本:
#!
/bin/sh
exportPLATFORM=POWERPC_82XX_MVISTA
exportKERN_DIR=kernel/linux/2.4.20
sudojam-f../../Jambase-d22>&1|teebuild.out
自己运行或者写个sh文件运行都可以
9、Linux下常用命令收集
参考附件:
10、GDB的使用
节点侧(server端):
root@10.4.38.235:
/#gdbserver10.4.41.166:
2001/usr/local/bin/scm//节点IP
Process./scmcreated;pid=124
Remotedebuggingfromhost10.4.38.61
creatingtask:
init,status=0
INIT:
creatingqueue:
status=0
INIT:
creatingqueue:
M51_,status=0
或者可以关联进程号,先在root下运行ps:
PIDUSERVSZSTATCOMMAND
279root90508S/usr/bin/nmgtactive
206root90508S/usr/bin/nmgtactive
227root90508S/usr/bin/nmgtactive
228root90508S/usr/bin/nmgtactive
265root90508S/usr/bin/nmgtactive
266root90508S/usr/bin/nmgtactive
267root90508S/usr/bin/nmgtactive
274root90508S/usr/bin/nmgtactive
275root90508S/usr/bin/nmgtactive
281root90508S/usr/bin/nmgtactive
283root90508S/usr/bin/nmgtactive
420root90508S/usr/bin/nmgtactive
502root2772Stelnetd
503root2780S-sh
506root2772Stail-f/var/log/messages
629root2772Rps
dbgserverxxxx:
2001--attachnum(你想调试的那个进程的)
dbgserverxxxx:
2001–attach281就是调试nmgt进程
PC侧启动:
(gdb)q
[zsj@localhostscm4]$ppc_82xx-gdb-qbin.mpc/scm(你要调试的文件路径,build下的或者
usr/local/bin下的都可以)
(gdb)targetremote10.4.41.166:
2001
Remotedebuggingusing10.4.38.235:
2001
常用命令列表:
1、(gdb)l<--------------------l命令相当于list,从第一行开始例出原码。
2、(gdb)<--------------------直接回车表示,重复上一次命令
3、(gdb)break16<--------------------设置断点,在源程序第16行处。
4、gdb)breakfunc<--------------------设置断点,在函数func()入口处。
5、(gdb)infobreak<--------------------查看断点信息。
6、(gdb)r<---------------------运行程序,run命令简写
7、(gdb)n<---------------------单条语句执行,next命令简写。
8、(gdb)c<---------------------继续运行程序,continue命令简写。
9、(gdb)pi<---------------------打印变量i的值,print命令简写。
p/x打印成16进制
10、(gdb)bt<---------------------查看函数堆栈。
11、(gdb)q<---------------------退出gdb。
详细使用说明参照附件:
11、配置mibbrowser调试环境(现在默认有值,可不做)
使用admin进入
AN2000_IB#snmpnetman-destination10.4.41.166primary
AN2000_IB#ipmanagementaddress10.4.41.166netmask255.255.255.0
ThiscommandwillchangetheIPaddressto10.4.38.234.
Executeanyway?
(yesorno)
yes
AN2000_IB#saveconfigbin
修改后telnet的登陆界面变成:
10.4.41.166login:
12、新系统的关键宏定义:
#definePHY_INDEX_2_SHELF(indx)(((indx)>>16)&0xff)
#definePHY_INDEX_2_SLOT(indx)(((indx)>>8)&0xff)
#definePHY_INDEX_2_PORT(indx)((indx)&0xff)
#definePHY_INDEX(slf,slot,port)(((slf)<<16)+((slot)<<8)+(port))
#definePHY_INDEX_BOARD(slf,slot)PHY_INDEX(slf,slot,0xFF)
#definePHY_INDEX_SLOT(slf,slot)PHY_INDEX(slf,slot,0xFE)
#defineBOARD_HDTYPE_2_MODULE(board_type,hd_type)(board_type<<16|hd_type)
#defineMODULE_2_BOARD(module_type)(module_type>>16)
#defineMODULE_2_HDTYPE(module_type)(module_type&0xff)