网站导航: 首页 > 设计参考 > 正文 文章搜索
ARM9的QT开发平台的建立
 
文章编号:
091113202448
文章分类: 单片机 ARM
点 击:
...
关 键 词: ARM9,QT
文章来源:
网络
摘 要:
第一次建立ARM9的QT开发平台,必须先编译开发ARM9功能所需的核心程式...

  第一次建立ARM9的QT开发平台,必须先编译开发ARM9功能所需的核心程式。一开始先将s3c2410_kernel2.4.18_r1.1_webcam.tar.bz2档放至个人 /root 资料夹中,然后开启终端机模式,切换到个人 /root 资料夹输入解压缩指令
root@ashou :~/#tar xvfj s3c2410_kernel2.4.18_r1.1_webcam.tar.bz2
解压缩完毕后,在个人 /root 资料夹中产生s3c2410_kernel2.4.18_r1.1_change的目录,此目录存放的是更改后的核心程式s3c2410_kernel2.4.18_r1.1。与原来核心程式版本的差异在于旧核心程式版本只支援到PWC-8.6;更改后的核心程式版本支援至PWC-8.8 。目的在于让2410能支援我们所买的webcam,型号为logitech quickcam 4000 pro 。为了日后可以使用核心程式来加速开发撰写ARM9的程式,我们将s3c2410_kernel2.4.18_r1.1_change搬移到 /usr/src目录中,在个人/root 资料夹输入指令如下
root@ashou:~/#mv /root/s3c2410_kernel2.4.18_r1.1_change /usr/src
如果一切顺利,s3c2410_kernel2.4.18_r1.1_change目录移至/usr/src资料夹内,画面如图1所示
 
图1. 更改后的核心程式目录s3c2410_kernel2.4.18_r1.1_change
为了日后可以使应用程式能include核心程式所提供有关于webcam的资料结构和驱动程式,切换至/usr/src,建立名称为linux的连结,指令如下
root@ashou :/usr/src#ln –s s3c2410_kernel2.4.18_r1.1_change linux
将s3c2410_kernel2.4.18_r1.1_change目录以softlink的形式连结至linux目录,以便能编译ARM9核心程式以及使用此更改后的核心程式来开发应用程式。
     编译ARM9的核心程式(kernel)有两种方法:1.文字模式2.图形模式。文字模式採用Y/N的问答方式,不管是否有无变动都需做Y/N的问答,如此需要约2000次的问答;因此採用文字模式编译ARM9的核心程式太繁琐。採用图形模式编译ARM9的核心程式是针对须更动的部份做问答;如此大幅简化编译ARM9核心程式的过程。为了採用图形模式来编译ARM9的核心程式(kernel),我们必须安装libncurses5-dev套件。切换至/usr/src目录,然后下指令
root@s608:/usr/src#apt-get install libncurses5-dev
顺利安装libncurses5-dev套件后,开始编译核心程式指令如下
root@s608:/usr/src #cd linux
root@s608:/usr/src/linux#make menuconfig
如果一切顺利,会出现图2的画面
 
图2 安装libncurses5-dev套件
下make menuconfig指令后,进入编译核心程式的视窗如图3所示
 
图3. 编译核心程式的视窗
选择 multimedia devices选项如图4所示
 
图4 选择 multimedia devices选项
按 enter键后如图5所示
 
图5. 选择 Video for Linux选项
然后按空白键选择Video For Linux,Video For Linux选项前面应出现<M>的符号,再按箭头键选择 Video For Linux --->,如图6所示。
 
图6. 出现<M>符号的Video for Linux选项
点选Video For Linux --->后会出现四个模组选项,分别是
Mediavision Pro Movie Studio Video For Linux
CPiA Video For Linux
CPia USB lowlevel Support
NetWinder Video For Linux (EXPERIMENTAL)
这四个模组选项都需重新编译。首先按enter键点选Mediavision Pro Movie Studio Video For Linux,点选后该选项前面会出现<M>符号。以同样的方法点选其它三个选项,因此最后这四个选项前面都应该有<M>符号,如图7所示。
 
图7 出现<M>符号的四个子模组选项
点选完毕后按两次Exit选项,再点选 USB support如图8所示。
 
图8. 点选USB support选项
然后再点选 USB Philips Cameras选项,点选完毕后USB Philips Cameras选项前面会出现<M>符号,如图9所示
 
图9. 点选USB Philips Cameras选项
点选完毕后再按Exit选项出现图10画面,选Yes即储存新的核心程式设定。
 
图10. 选Yes储存新的核心程式设定
储存新的核心程式设定后,ubuntu作业系统自动进入文字模式的终端机视窗。检查/usr/src/linux/arch/arm/mach-s3c2410资料夹下的pcibuf.c的内容,有关MAX_SAFE、SIZE_SMALL及SIZE_LARGE参数必须设定如下:

#define MAX_SAFE  32
#define SIZE_SMALL  1024
#define SIZE_LARGE  (16*1024)

做完必要的修正后重新编译核心程式前,必须下指令寻找更改后核心程式的相依性,指令如下
root@s608:/usr/src/linux#make dep
接下来即可编译新的核心程式,指令如下:
root@s608:/usr/src/linux#make modules
如果一切顺利,会出现图11画面。
 
图11. 编译新的核心程式成功后所出现的画面
--------------------------------------------------------------------------------------------------------
为了编译和使用Qtopia,必须在同一root终端机模式进行。若中途离开root终端机模式,所有用export指令所设定的环境变数将消失。例如
export QPEDIR=$PWD
export QTEDIR=$QTDIR
…………….
若不小心中途离开root终端机模式,必须再用export指令将所需的环境变数设定一次。
在arm9上建立QT的开发平台以前,必须确定已在PC上成功的建立QT的开发平台。然后将qtopia-free-1.7.0、qt-2.3.7-embedded和cross-arm-extra.tgz拷贝至使用者根目录上的另一个资料夹。假设此资料夹名称为qtopia_arm。然后进行以下的安装步骤:
1. 解压缩qtopia-free-1.7.0
2. 安装qt-2.3.7-embedded (ARM-9专门的QT套件)
3. 建立针对ARM-9需要的Qtopia套件
4. 修改ARM-9的root file system,然后产生.cramfs档桉
5. 将.cramfs档桉烧录至ARM-9

在qtopia_arm资料夹下若存在为了产生PC版的qt-2.3.7-embedded和qtopia-free-1.7.0资料夹。须先将这两个资料夹的内容删除。步骤1-3须一次完成,若在其中一个步骤作make动作时发生错误,须找出错误原因然后也须将这两个资料夹的内容删除,然后在重新进行步骤1-4的安装过程。删除指令如下:
root@608:~/qtopia_arm#rm –rf qtopia-free-1.7.0
root@608:~/qtopia_arm#rm –rf qt-2.3.7-embedded

1. 解压缩qtopia-free-1.7.0
解压缩qtopia-free-1.7.0.tar.bz2,指令如下:
root@s608:~/ qtopia_arm #tar xvfz qtopia-free-1.7.0.tar.gz

解压缩完毕后将产生qtopia-free-1.7.0资料夹。再用cd指令切换至qtopia-free-1.7.0,设定环境变数QPEDIR为目前所在的目录:
root@s608:~/ qtopia_arm # cd qtopia-free-1.7.0
root@s608:~/ qtopia_arm/ qtopia-free-1.7.0# export QPEDIR=$PWD
root@s608:~/ qtopia_arm/ qtopia-free-1.7.0#cd ..

最后回到qtopia_arm资料夹。

2. 安装qt-2.3.7-embedded
在qtopia_arm资料夹下将qt-embedded-2.3.7.tar解压缩,指令如下:
root@s608:~/qtopia_arm#tar xvfz qt-embedded-2.3.7.tar.gz

解压缩完毕后产生qt-2.3.6资料夹,为了强调此资料夹是ARM-9专用,将qt-2.3.7资料夹名称更改为qt-2.3.7-embedded:
root@s608:~/ qtopia_arm #mv qt-2.3.7 qt-2.3.7-embedded

用cd指令切换至qt-2.3.7-embedded资料夹:.
root@s608:~/ qtopia_arm#cd qt-2.3.7-embedded

用export指令设定共用的环境变数QTDIR、QTEDIR、PATH和LD_LIBRARY_PATH:
root@s608:~/ qtopia_arm/qt-2.3.7-embedded # export QTDIR=$PWD
root@s608:~/ qtopia_arm/qt-2.3.7-embedded # export QTEDIR=$QTDIR
root@s608:~/ qtopia_arm/qt-2.3.7-embedded # export PATH=$QTDIR/bin:$PATH
root@s608:~/ qtopia_arm/qt-2.3.7-embedded #export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

将/qtopia_arm/qtopia-free-1.7.0/src/qt/目录下的qconfig-qpe.h复製一份至:
~/ qtopia_arm/qt-2.3.7-embedded/src/tools/目录:
 root@s608:~/ qtopia_arm/qt-2.3.7-embedded #cp ~/qtopia_arm/qtopia-free-1.7.0/src/qt/qconfig-qpe.h src/tools/

切换至~/qtopia_package/qt-2.3.2-x11目录,将~/qtopia_package/qt-2.3.2-x11/bin/目录下的uic复製一份至$QTEDIR/bin,目前QTEDIR =~/qtopia_arm/qt-2.3.7-embedded,指令如下:
root@s608:~/ qtopia_arm/qt-2.3.7-embedded #cd ~/qtopia_package/qt-2.3.2-x11..
root@s608:~/ qtopia_arm/qt-2.3.2-x11#cp bin/uic $QTEDIR/bin

切换回~/qtopia_arm/qt-2.3.7-embedded,然后作make 前的configure动作:
root@s608:~/ qtopia_arm/qt-2.3.2-x11# cd ~/qtopia_arm/qt-2.3.7-embedded
root@s608:~/ qtopia_arm/qt-2.3.7-embedded # ./configure -qconfig qpe -qvfb -depths 4,8,16,32 –system-jpeg –xplatform linux-arm-g++

将:~/ qtopia_arm/ qt-2.3.7-embedded/usr/local/arm/2.95.3/include/
目录下的所有档桉复製至~/qtopia_arm/ qt-2.3.7-embedded/usr/local/arm/2.95.3/arm-linux/include目录,指令如下:

root@s608:~/ qtopia_arm/ qt-2.3.7-embedded #cp /usr/local/arm/2.95.3/include/* /usr/local/arm/2.95.3/arm-linux/include/

将:~/ qtopia_arm/ qt-2.3.7-embedded/usr/local/arm/2.95.3/lib/
目录下的所有档桉复製至~/qtopia_arm/usr/local/arm/2.95.3/arm-linux/lib/ qt-2.3.7-embedded/usr/local/arm/2.95.3/arm-linux/include目录,指令如下:
root@s608:~/ qtopia_arm/ qt-2.3.7-embedded #cp /usr/local/arm/2.95.3/lib/* /usr/local/arm/2.95.3/arm-linux/lib/

接下来做make动作:
root@s608:~/ qtopia_arm/ qt-2.3.7-embedded #make sub-src

 
3. 建立针对ARM-9需要的Qtopia套件
    欲在ARM建立Qtopia套件功能 须先将cross-arm-extra.tgz解压缩,然后将解压缩所产生的include及lib资料夹分别拷贝至/usr/local/arm/2.95.3/arm-linux/include/及/usr/local/arm/2.95.3/arm-linux/lib/内, 指令如下
root@s608:~/ qtopia_arm#tar xvfz cross-arm-extra.tgz
root@s608:~/ qtopia_arm#cp –rf include/* /usr/local/arm/2.95.3/arm-linux/include/
root@s608:~/qtopia_arm#cp –rf lib/* /usr/local/arm/2.95.3/arm-linux/lib/

用cd指令切换至qtopia-free-1.7.0,再用export指令设定共用的环境变数QTDIR、QPEDIR和PATH:
root@s608:~/qtopia_arm#cd qtopia-free-1.7.0
root@s608:~/qtopia_arm/qtopia-free-1.7.0#export QTDIR=$QTEDIR
root@s608:~/qtopia_arm/qtopia-free-1.7.0#export QPEDIR=$PWD
root@s608:~/qtopia_arm/qtopia-free-1.7.0#export PATH=$QPEDIR/bin:$PATH

目前QTEDIR=:~/qtopia_arm/qt-2.3.7-embedded/。用cd指令切换至~/qtopia_arm/qtopia-free-1.7.0/src,然后作configure及make动作:

root@s608:~/qtopia_arm/qtopia-free-1.7.0#cd src
root@s608:~/qtopia_arm/qtopia-free-1.7.0/src# ./configure –xplatform linux-arm-g++
root@s608:~/qtopia_arm/qtopia-free-1.7.0/src#make


4. 修改ARM-9的root file system,然后产生.cramfs档桉
为了要将QT功能加入ARM9发展板,我们必须先将QT套件摆至ARM9发展板根目录系统(root file system)中的bin目录。将修改后的根目录系统转换为.cramfs(continuous RAM file system)档桉,然后载入ARM9发展板起始位址为1M的flash记忆体中。假设ARM9的根目录名称为root_english。产生.cramfs档桉步骤如下:

A. 安装apache套件
root@s608:~#apt-get install apache

B. 删除  ~/root_english/mnt/etc/目录下的linuette档桉,指令如下
root@s608:~#rm -rf ~/root_english/mnt/etc/linuette

C. 删除  ~/root_english/usr 目录中的 linuette和 qt 档桉:
root@s608:~#rm -rf ~/root_english/usr/linuette
root@s608:~#rm -rf ~/root_english/usr/qt

D.在/root_english/资料夹下新增一些目录:
root@s608:~/root_english#mkdir -p ~/root_english/Qtopia/qt-2.3.7/lib
root@s608:~/root_english#mkdir ~/root_english/Qtopia/qtopia-free-1.7.0
root@s608:~/root_english#mkdir ~/root_english/Qtopia/qtopia-free-1.7.0/sets
若以上三个资料夹已存在,先用rm -rf…指令删除这些资料夹,然后再作mkdir动作。

E. 将~/qtopia_arm/qtopia-free-1.7.0/下的所有资料夹及档桉(bin、apps、help、lib、pics、sounds、i18n、etc、plugins、serveices、LICENSE和README.html)拷贝至~/root_english/Qtopia/qtopia-free-1.7.0/:
root@s608:~/root_english#cp -rf ~/qtopia_arm/qtopia-free-1.7.0/bin ~/root_english/Qtopia/qtopia-free-1.7.0/
root@s608:~/root_english#cp –rf ~/qtopia_arm/qtopia-free-1.7.0/apps ~/root_english/Qtopia/qtopia-free-1.7.0/
root@s608:~/root_english#cp –rf ~/qtopia_arm/qtopia-free-1.7.0/help ~/root_english/Qtopia/qtopia-free-1.7.0/
root@s608:~/root_english#cp -rf ~/qtopia_arm/qtopia-free-1.7.0/lib ~/root_english/Qtopia/qtopia-free-1.7.0/
root@s608:~/root_english#cp –rf ~/qtopia_arm/qtopia-free-1.7.0/pics ~/root_english/Qtopia/qtopia-free-1.7.0/
root@s608:~/root_english#cp -rf ~/qtopia_arm/qtopia-free-1.7.0/sounds ~/root_english/Qtopia/qtopia-free-1.7.0/
root@s608:~/root_english#cp -rf ~/qtopia_arm/qtopia-free-1.7.0/i18n ~/root_english/Qtopia/qtopia-free-1.7.0/
root@s608:~/root_english#cp -rf ~/qtopia_arm/qtopia-free-1.7.0/etc ~/root_english/Qtopia/qtopia-free-1.7.0/
root@s608:~/root_english#cp -rf ~/qtopia_arm/qtopia-free-1.7.0/plugins ~/root_english/Qtopia/qtopia-free-1.7.0/
root@s608:~/root_english#cp -rf ~/qtopia_arm/qtopia-free-1.7.0/services ~/root_english/Qtopia/qtopia-free-1.7.0/
root@s608:~/root_english#cp -rf ~/qtopia_arm/qtopia-free-1.7.0/LICENSE ~/root_english/Qtopia/qtopia-free-1.7.0/
root@s608:~/root_english#cp -rf ~/qtopia_arm/qtopia-free-1.7.0/README.html ~/root_english/Qtopia/qtopia-free-1.7.0/


F. 将~/qtopia_arm/qt-2.3.7-embedded/lib下的相关档桉拷贝至~/root_english/Qtopia/qt-2.3.7/lib:
root@s608:~/root_english#cp -rf ~/qtopia_arm/qt-2.3.7-embedded/lib ~/root_english/Qtopia/qt-2.3.7/

G. 将root目录下的资料夹(Applications、Documents、Settings)拷贝至~/root_english/Qtopia/qtopia-free-1.7.0/sets目录中:
root@s608:~#cp -rf ~/Applications ~/root_english/Qtopia/qtopia-free-1.7.0/sets
root@s608:~#cp -rf ~/Documents ~/root_english/Qtopia/qtopia-free-1.7.0/sets
root@s608:~#cp -rf  ~/Settings ~/root_english/Qtopia/qtopia-free-1.7.0/sets

H. 若~/root_english/Qtopia/qtopia-free-1.7.0/sets目录下没有(qcop-msg-language、qcop-msg-launchersettings、qcop-msg-qpe、qcop-msg-quicklauncher、qcop-msg-systemtime)这些档桉,则建立这些档桉:

root@s608:~#touch ~/root_english/Qtopia/qtopia-free-1.7.0/sets/qcop-msg-language
root@s608:~#touch ~/root_english/Qtopia/qtopia-free-1.7.0/sets/qcop-msg-launchersettings
root@s608:~#touch ~/root_english/Qtopia/qtopia-free-1.7.0/sets/qcop-msg-qpe
root@s608:~#touch ~/root_english/Qtopia/qtopia-free-1.7.0/sets/qcop-msg-quicklauncher
root@s608:~#touch ~/root_english/Qtopia/qtopia-free-1.7.0/sets/qcop-msg-systemtime

I. 使用gedit修改在~/root_english/usr/etc/ 目录下的 rc.local档桉:
 
root@s608:~#gedit ~/root_english/usr/etc/rc.local

在rc.local中增加以下指令:

. /usr/etc/shrc
cd /tmp/
/bin/cp -rf /Qtopia/qtopia-free-1.7.0/wjluv/* /tmp/
echo "start qpe "
/Qtopia/qtopia-free-1.7.0/bin/qpe -qws &
sleep 5
/Qtopia/qtopia-free-1.7.0/bin/qcop "QPE/System" "execute(QString)" "calibrate" &

在rc.local所增加的指令如图12所示。
 
图12. 在rc.local档增加一些与QT程式有关的指令
 
J. 使用gedit在~/root_english/usr/etc/ 目录下修改(新增)shrc草稿档:
root@s608:~#gedit ~/root_english/usr/etc/shrc
    新增内容如下:
#!/bin/sh
export DISPLAY=:0.0
export HOME=/tmp
export QPEDIR="/Qtopia/qtopia-free-1.7.0"
export QTDIR="/Qtopia/qt-2.3.7"
export QTEDIR="/Qtopia/qt-2.3.7"
export PATH=$QPEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib
修改后的shrc如图13所示。
 
图13. 修改后的shrc档桉

K. 使用gedit在~/root_english/usr/etc/ 目录下修改(新增)profile草稿档:
 root@s608:~#gedit ~/root_english/usr/etc/profile

新增内容如下:
#!/bin/sh
DISPLAY=unix:0.0
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
LD_LIBRARY_PATH=/lib:/usr/lib:/Qtopia/qt-2.3.7/lib
QWS_KEYBOARD=TTY
LANG=C
HOME=/tmp
KMOD=/lib/modules/2.4.18-rmk7-pxa1
TERMINFO_DIRS=/usr/etc
export PATH LD_LIBRARY_PATH QTDIR LINUETTEDIR QWS_KEYBOARD LANG HOME DISPLAY KDEDIR KMOD TERMINFO_DIRS

L.下指令
root@s608:~/root_english#ls –al

查看~/root_english/.profile是否与~/root_english/usr/etc/profile连结,如图14所示。
 
图14 使用ls –al 指令查看~/root_english/.profile是否与~/root_english/usr/etc/profile连结

若没有则作连结,在~/root_english/usr/etc/profile增加如下指令
export HOME=/tmp
export QPEDIR=”/Qtopia/qtopia-free-1.7.0”
export QTDIR="/Qtopia/qt-2.3.7"
export QTEDIR="/Qtopia/qt-2.3.7"
export PATH=$QPEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib

完整的~/root_english/usr/etc/profile档桉如图15所示。
 
图15 完整的~/root_english/usr/etc/profile档桉
若没有互相连结,则增加~/root_english/.profile档桉,内容如下:
root@s608:~#gedit ~/root_english/.profile
#!/bin/sh
DISPLAY=unix:0.0
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
LD_LIBRARY_PATH=/lib:/usr/lib:/Qtopia/qt-2.3.7/lib
QWS_KEYBOARD=TTY
LANG=C
HOME=/tmp
KMOD=/lib/modules/2.4.18-rmk7-pxa1
TERMINFO_DIRS=/usr/etc
export PATH LD_LIBRARY_PATH QTDIR LINUETTEDIR QWS_KEYBOARD LANG HOME DISPLAY KDEDIR KMOD TERMINFO_DIRS
export HOME=/tmp
export QPEDIR="/Qtopia/qtopia-free-1.7.0"
export QTDIR="/Qtopia/qt-2.3.7"
export QTEDIR="/Qtopia/qt-2.3.7"
export PATH=$QPEDIR/bin:$PATH    
export LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/lib

在~/root_english/mnt/etc/若没有pointercal此档桉,则产生此档桉:
root@s608:~#touch ~/root_english/mnt/etc/pointercal

M. 在~/root_english/usr/目录下新增share资料夹:
root@s608:~#mkdir ~/root_english/usr/share

N.複製~/qtopia_arm/qtopia-free-1.7.0/etc/目录下的zoneinfo档桉至~/root_english/usr/share目录中:
root@s608:~#cp -rf ~/qtopia_arm/qtopia-free-1.7.0/etc/zoneinfo ~/root_english/usr/share

O.複製/usr/local/arm/2.95.3/arm-linux/lib/目录下的libuuid.so*档桉至~/root_english/lib/目录中:
root@s608:~#cp /usr/local/arm/2.95.3/arm-linux/lib/libuuid.so* ~/root_english/lib/

P. 使用mkcramfs指令产生将root_english 目录下的档桉系统转换为.cramfs的档桉型态:
root@s608:~#mkcramfs ~/root_english ./qtopia-1.7.cramfs

5. 将.cramfs档桉烧录至ARM-9
将档桉下载至ARM9的tmp资料夹有透过(telnet, ncftp)、minicom和(telnet, wget)三种方法。当档桉较小时,用com port 透过minicom传输较方便。如果忘记ARM-9的IP位址,也可透过minicom进入ARM-9查看ARM的IP位址。但是欲下载的档桉较大时,用minicom传输较费时,这时候建议使用(telnet, wget)的传输方法。
使用wget指令时,须先将欲下载的档桉放在/var/www资料夹内。

首先将qtopia-1.7.cramfs放到/var/www目录下:
root@s608:~#cp ~/qtopia-1.7.cramfs /var/www

使用find指令找imagewrite档桉然后放至根目录,再将imagewrite档桉也放至 /var/www 指令如下:
root@s608:~#cp ~/imagewrite /var/www

使用telnet与ARM9连线:
root@s608:~#telnet 192.168.2.20
.
.
    login: root
.
.
其中192.168.2.20代表ARM-9的I/P位址。若连线成功,操作环境便移至ARM9。使用cd指令切换至 tmp资料夹,下载imagewrite及qtopia-1.7.cramfs 档桉:
#cd tmp
#wget http://192.168.2.163/imagewrite
#wget http://192.168.1.254/qtopia-1.7.cramfs
执行imagewrite指令,将qtopia-1.7.cramfs放至起始位址为1M的快闪(flash)记忆体:
#chmod a+x imagewrite
#imagewrite /dev/mtd/0 qtopia-1.7.cramfs:1M
如此便将ARM9的根目录系统(root file system)作更新的动作。
 
 
相关文章:

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4