Some tips

本站充满一个无聊的人的一些奇技淫巧

星期二, 三月 31, 2009

如何QNX下建立新用户

不像其他的UNIX系统,适用useradd或adduser命令来建立新用户,在QNX下新建用户和改已有用户的密码都使用相同的命令passwd。如新建用户newuser,
运行命令passwd newuser,根据提示,输入用户ID号,组ID号,用户HOME目录和用户的SHELL命令,结束后,在/etc/passwd文件下就会多一条记录。

标签:

星期六, 三月 14, 2009

QNX 4.25的时间问题

在QNX 4.25下,用c语言time函数生成的time_t类型的时间数据,在windows下读出来,时间相差8小时。究其原因,是因为在QNX下没有设置正确的时区,而WINDOWS设置了。解决方法是:
在sysinit.1中,设定TZ环境变量:
export TZ=wast-08

这样time函数保存的时间和windows下读出的时间就一致了。
在QNX下设置时间命令的例子:
#设定时间为2009年3月15日12时12分
date 200903151212
#将当前时间写到硬件时钟中
rtc -s hw

标签: ,

星期二, 十月 28, 2008

QNX4.25设置从RAMDISK启动应用程序

最近的应用中,DiskOnChip 2000经常损坏,开始怀疑是不是对其访问次数过多引起的。所以决定将应用程序放到Ramdisk上启动。

首先要编译boot image,一个例子编译文件为:
sys/boot
$ boot -v

sys/Proc32
$ Proc32 -l 1

sys/Slib16
$ Slib16

sys/Slib32
$ Slib32

/bin/Fsys
$ Fsys -r 1024

/bin/Fsys.diskonchip
$ Fsys.diskonchip

/bin/mount
$ mount -p/dev/tffs0 /dev/tffs0t77 /

/bin/sinit
$ sinit TERM=qnx

其中重要的命令是Fsys -r 1024,这样会自动建立一个1024k的Ramdisk。
然后在/boot目录下,运行“make b=doc2000”编译好boot image在/boot/images/doc2000下。
将这个boot image拷贝到目标系统中,替换原有的.boot文件,重启后,目标机出现Ramdisk的设备“/tmp/ram”。运行如下命令初始化Ramdisk:
dinit /dev/ram
mount /dev/ram /ram


然后接下来就是拷贝应用程序到/ram目录下,然后运行即可。
当然也可以编辑启动脚本sysinit.1让其自动运行。

标签:

星期三, 八月 22, 2007

通过修改sinit运行参数提高QNX4.25启动速度失败

为了提高QNX4.25的启动速度,刷新PC104的快速BIOS程序,然后更改DiskOnChip的引导参数,去掉sysinit.1中多于的命令后,从上电到启动还是需要13s时间。
因此想从build boot image上下功夫。
在build文件中最后移行是sinit命令,用use命令查看sinit的帮助信息后,

sinit - initialize the system (QNX)

sinit [options...] [var=value]
Options:
-i init_file Override default system initialization file.
-r path Set a system root directory for /
-s shell_name Use this shell to run initialization file.
-n No network (makes stand alone systems boot faster).
-w Wait for a name locator to communicate with your node.
Only usefull for disk boot.
var=value Define an environment variable.

(NOTE: If present var=value must be the last option on the command line)

发现sinit有个参数“-n”,可以实现无网络启动,这样是启动boot速度更快。这样马上修改了build文件,重新build boot images后,用新image启动,结果出现下面的错误,然后就死机了。
Invalid Option ('n')

经过查看官方手册对sinit的说明:

-i initfile Open this system initialization file (for defaults, see the
Description below).
-r root Define an alias prefix for the filesystem root (/).
-s shell Invoke this shell (default is /bin/sh).
-w Wait for a name locator to communicate with our node.
Only useful for disk boot. See also nameloc -k.
var=value Define an environment variable.

和我用use命令得到的信息是矛盾的,然后上网搜索,均没有找到sinit的这个参数,看来这个‘n’参数可能被屏蔽了,也可能是打算支持,但还没有做好的一个功能。

标签:

星期四, 八月 16, 2007

QNX剪裁过程中的问题

QNX裁剪后,可以启动了。
在sysinit.1增加启动网络的脚本后,启动出现错误“Could not link shared object 'socket_so': no such file”。发现系统中/usr/ucb目录下是有这个文件的,而且仔细检查发现这个错误是ifconfig命令导致的,但登录后单独运行ifconfig就没有任何错误提示,只是这个命令放在sysinit.1才有问题。

后来发现系统启动登录前是没有设置PATH变量的,所以系统并不会去/usr/ucb下面寻找文件,但是在登录后,由于在profile中设置了/usr/ucb的PATH,所以就可以运行ifconfig找到socket_so了。

所以解决方法就是copy /usr/ucb/socket_so /bin。

标签:

星期三, 七月 11, 2007

QNX 4.25对DFE 530TX网卡的支持

QNX4.25自带的Net.via不支持530Tx网卡。
需要到qnx.com上下载网络升级包QNX4-network_20051115.tar.gz,解压后,新版的Net.via就加入了530Tx网卡的支持了。

经过测试QNX4.25下可用的网卡:
  1. NE2000网卡
  2. Intel 82557/8/9系列(自带的驱动有bug,需要升级包中的Net.ether82557)
  3. Dlink 530TX网卡
另外,RTL8029网卡应该属于兼容NE2000系列,但是用Net.ether1000一直未驱动成功。

标签:

星期一, 六月 18, 2007

qnx4.25 加载 usb移动存储

qnx4.25 加载 usb 设备

Thursday, 21. September 2006, 01:47:25
到qnx.com下载usb2.0的驱动程序,解压到bin目录。

io-usb
Fsys.umass
mount -p /dev/hd1
Dosfsys c=/dev/hd1t6

Fsys.umass会识别闪盘,mount装载闪盘分区,Dosfsys把闪盘分区装到/dos/c目录下,也可以用Fatfsys命令代替Dosfsys,Fatfsys识别FAT32文件系统。

卸载闪盘

Dosfsys -x
umount /dev/hd1
rm /dev/hd1

标签:

星期二, 六月 05, 2007

在128m的DiskOnChip上安装QNX4.25

设备:PC104主板,带有IDE接口,软驱,DiskOnChip插口。
新买的128M的doc是5.14版本的,手头的安装软盘不识别,安装过程不能继续。


首先将系统安装在硬盘上。我用的是IDE转CF卡,用这个来当硬盘使用。将最新的diskonchip驱动Fsys.diskonchip拷贝到硬盘中的系统中。在硬盘中的系统mount安装软盘,将安装软盘的Fsys.diskonchip文件替换。

在硬盘上启动dos,用dos下面的dformat格式化doc:
dformat /win:ce00 /s:doc514.exb /y
其中ce00是doc的窗口地址,可以查看主板手册,或者运行dinfo得到。


在硬盘上启动qnx,运行
Fsys.diskonchip
fdisk /dev/tffs0
删除第四项dos分区,新建两个分区:77和78,依次为第四项和第三项,并将他们改成自己所需的容量大小,然后在第四项设置成允许启动,保存退出。

然后重新开始软盘安装过程,在安装前卸载cf卡,安装过程提示插入第三方驱动,包括最新的doc驱动,安装过程中出现fdisk,直接退出即可,因为分区过程在前面已经完成。


标签: