随笔分类 - SmartARM3250
周立功SmartARM3250学习历程与总结
在内核顶层Makefile中增加软链接
摘要:
由于最新内核头文件位置的改变,一些原有的驱动所包含的头文件会找不到,为了肢解使用旧有的驱动而不做太大改动,可以增加一个软连接:
cd ../include/asm-arm/
ln -sf ../../arch/arm/mach-lpc32xx/include/mach/ arch
将arch/arm/mach-lpc32xx/include/mach/链接为include/asm-arm/arch,即
include/asm-arm/arch--arch/arm/mach-lpc32xx/include/mach
这样,原有驱动中#include 就可以使用了。
阅读全文
由于最新内核头文件位置的改变,一些原有的驱动所包含的头文件会找不到,为了肢解使用旧有的驱动而不做太大改动,可以增加一个软连接:
cd ../include/asm-arm/
ln -sf ../../arch/arm/mach-lpc32xx/include/mach/ arch
将arch/arm/mach-lpc32xx/include/mach/链接为include/asm-arm/arch,即
include/asm-arm/arch--arch/arm/mach-lpc32xx/include/mach
这样,原有驱动中#include 就可以使用了。
阅读全文
在LPC3250上使用UBIFS文件系统
摘要:
文件: lzo-2.03.tar.gz
大小: 611KB
下载: 下载
文件: mtd-utils-1.2.0.tar.bz2
大小: 270KB
下载: 下载
文件: zlib-1.2.3.tar.gz
大小: 484KB
下载: 下载
在SmartARM3250上使用UBIFS内核配置
使用UBIFS,首先需要在内核中使能MTD_UBI和UBIFS:
在MTD中使能UBI:
Enable UBI
在FS中使能UBIFS:
UBIFS file system support
工具支持
使用UBI,需要UBI的一些工具,如ubiattach ubimkvol等,这些工具都包含在教新版的mtd-utils中,我下载了mtd-utils-1.2.0.tar.b
阅读全文
文件: lzo-2.03.tar.gz
大小: 611KB
下载: 下载
文件: mtd-utils-1.2.0.tar.bz2
大小: 270KB
下载: 下载
文件: zlib-1.2.3.tar.gz
大小: 484KB
下载: 下载
在SmartARM3250上使用UBIFS内核配置
使用UBIFS,首先需要在内核中使能MTD_UBI和UBIFS:
在MTD中使能UBI:
Enable UBI
在FS中使能UBIFS:
UBIFS file system support
工具支持
使用UBI,需要UBI的一些工具,如ubiattach ubimkvol等,这些工具都包含在教新版的mtd-utils中,我下载了mtd-utils-1.2.0.tar.b
阅读全文
LPC3250 ttyS1 发送问题解决办法
摘要:
LPC3250 ttyS1,在应用程序中使用了usleep或者使用了线程等待操作,发送数据会出现只能发送一次,后续帧无法发送的问题,必须在超级终端按回车或者通过串口软件发送一个字符后才能发出后来的帧,问题解决如下:
将8250.c的__stop_tx函数改为如下代码:
阅读全文
LPC3250 ttyS1,在应用程序中使用了usleep或者使用了线程等待操作,发送数据会出现只能发送一次,后续帧无法发送的问题,必须在超级终端按回车或者通过串口软件发送一个字符后才能发出后来的帧,问题解决如下:
将8250.c的__stop_tx函数改为如下代码:
阅读全文
使用静态设备节点的cdev字符驱动GPIO
摘要:
尽管在2.6的内核版本已经支持udev,可以很方便的使用,并且使用也很舒服。但是使用udev,在启动过程中扫描/sys/class目录并生成设备节点的时间稍微有点长,在一些系统中是无法忍受的,所以没办法只好放弃udev,回到静态设备节点的时代,以加快启动速度。
2.6内核中,引入了cdev概念,使用cdev的驱动与传统的2.4的字符驱动又不一样,下面给出一个使用cdev和静态设备节点的驱动范例。
阅读全文
尽管在2.6的内核版本已经支持udev,可以很方便的使用,并且使用也很舒服。但是使用udev,在启动过程中扫描/sys/class目录并生成设备节点的时间稍微有点长,在一些系统中是无法忍受的,所以没办法只好放弃udev,回到静态设备节点的时代,以加快启动速度。
2.6内核中,引入了cdev概念,使用cdev的驱动与传统的2.4的字符驱动又不一样,下面给出一个使用cdev和静态设备节点的驱动范例。
阅读全文
initramfs 使用
摘要:
使用initramfs可以实现内核和文件系统在一个映像文件中,不过会增大内核体积,同时占用较多内存。
(1)准备根文件系统
先准备好根文件系统,放到某个目录,不过为了方便和内核一起打包,可以放到内核源代码的usr/目录下,我的做法是在usr目录下建立了image目录,然后将可用的根文件系统的内容全部复制到image目录下:
[chenxibing@localhost linux-2.6.27.8-smartarm3250]$ ls usr/image
bin dev hello.c home lib mnt proc sbin tmp var
boot etc hello_static init Makefile opt root sys usr
另外千万注意,initramfs识别的第一个进程名称为init,因此
阅读全文
使用initramfs可以实现内核和文件系统在一个映像文件中,不过会增大内核体积,同时占用较多内存。
(1)准备根文件系统
先准备好根文件系统,放到某个目录,不过为了方便和内核一起打包,可以放到内核源代码的usr/目录下,我的做法是在usr目录下建立了image目录,然后将可用的根文件系统的内容全部复制到image目录下:
[chenxibing@localhost linux-2.6.27.8-smartarm3250]$ ls usr/image
bin dev hello.c home lib mnt proc sbin tmp var
boot etc hello_static init Makefile opt root sys usr
另外千万注意,initramfs识别的第一个进程名称为init,因此
阅读全文
ARM9低功耗
摘要:
在ARM9内核中,实现低功耗的方法之一可以通过MMU进行管理,在idle任务中增加如下代码即可:
.section __cache_asm
.global __mmuWaitForInterrupt ;/* 系统内核进入低功耗模式, */
;/* 等待 FIQ/IRQ 激活 */
.func __mmuWaitForInterrupt
__mmuWaitForInterrupt: ;/* ARM 进入节能状态,等待中断 */
mov r0, 0
MCR p15, 0, R0, c7, c0, 4
MOV PC, LR
.endfunc
阅读全文
在ARM9内核中,实现低功耗的方法之一可以通过MMU进行管理,在idle任务中增加如下代码即可:
.section __cache_asm
.global __mmuWaitForInterrupt ;/* 系统内核进入低功耗模式, */
;/* 等待 FIQ/IRQ 激活 */
.func __mmuWaitForInterrupt
__mmuWaitForInterrupt: ;/* ARM 进入节能状态,等待中断 */
mov r0, 0
MCR p15, 0, R0, c7, c0, 4
MOV PC, LR
.endfunc
阅读全文
内核运行之前访问IO
摘要:
如果要在内核运行之前访问CPU的某些IO端口,直接使用指针方式定义寄存器进行操作即可。例如,在解压内核的时候喂狗,通过操作IO进行,可以这样操作:
在arch/arm/boot/compressed/misc.c文件:
307 arch_decomp_setup();
308
309 makecrc();
310 *((volatile unsigned long *)0x40E00054) &= (~(328)); //ABING GPAF0_L
311 *((volatile unsigned long *)0x40E0001C) = (114); //ABING GPDR0
312 *((volatile unsigned long *)0x40E00024) = (114
阅读全文
如果要在内核运行之前访问CPU的某些IO端口,直接使用指针方式定义寄存器进行操作即可。例如,在解压内核的时候喂狗,通过操作IO进行,可以这样操作:
在arch/arm/boot/compressed/misc.c文件:
307 arch_decomp_setup();
308
309 makecrc();
310 *((volatile unsigned long *)0x40E00054) &= (~(328)); //ABING GPAF0_L
311 *((volatile unsigned long *)0x40E0001C) = (114); //ABING GPDR0
312 *((volatile unsigned long *)0x40E00024) = (114
阅读全文
Qte 编程
摘要:
Qte 2编程,生成工程可以使用progen,也可使用qmake。
设置环境变量
脚本放在/home/chenxibing/lpc3250/qtopia-x86/qtopia-free-2.2.0-x86目录下,内容如下:
1
2 echo Start Setting env-var
3 export QTDIR=$PWD/qt2
4 export QTEDIR=$QTDIR
5 export QPEDIR=$PWD/qtopia
6 export TMAKEDIR=$PWD/tmake
7 export QMAKESPEC=linux-g++
8 export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
9 export PATH=$QTDIR/bin:$QPEDIR/bin:$TM
阅读全文
Qte 2编程,生成工程可以使用progen,也可使用qmake。
设置环境变量
脚本放在/home/chenxibing/lpc3250/qtopia-x86/qtopia-free-2.2.0-x86目录下,内容如下:
1
2 echo Start Setting env-var
3 export QTDIR=$PWD/qt2
4 export QTEDIR=$QTDIR
5 export QPEDIR=$PWD/qtopia
6 export TMAKEDIR=$PWD/tmake
7 export QMAKESPEC=linux-g++
8 export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
9 export PATH=$QTDIR/bin:$QPEDIR/bin:$TM
阅读全文
Qtopia-2.2.0 控制台问题
摘要:
embededkonsole不正常
修改embeddedkonsole.pro文件,修改红色部分,增加所指定平台,或者干脆直接去掉平台指定。
contains(QMAKE_ARCH,x86)|contains(QMAKE_ARCH,generic)|contains(QMAKE_ARCH,ipaq)|contains(QMAKE_ARCH,sharp) {
LIBS+=-lutil
DEFINES+=HAVE_OPENPTY
}
src/server/main.cpp
#else // SINGLE_EXEC
#include
#include
#include
#include
void doCalibrate()
{
const c
阅读全文
embededkonsole不正常
修改embeddedkonsole.pro文件,修改红色部分,增加所指定平台,或者干脆直接去掉平台指定。
contains(QMAKE_ARCH,x86)|contains(QMAKE_ARCH,generic)|contains(QMAKE_ARCH,ipaq)|contains(QMAKE_ARCH,sharp) {
LIBS+=-lutil
DEFINES+=HAVE_OPENPTY
}
src/server/main.cpp
#else // SINGLE_EXEC
#include
#include
#include
#include
void doCalibrate()
{
const c
阅读全文
Qtopia-2.2.0启动脚本
摘要:
在ARM上启动Qtopia-2.2.0:
使用USB鼠标的脚本:
#!/bin/sh
HOME=/root
QTDIR=/opt/Qtopia
QPEDIR=/opt/Qtopia
QWS_MOUSE_PROTO="USB:/dev/input/mice" #使用mice可以实现鼠标热插拔,但是触摸屏还会有响应
#QWS_MOUSE_PROTO="USB:/dev/input/mouse1" #鼠标不能实现热插拔,但是触摸屏会停止响应
QWS_KEYBOARD=""
QWS_SIZE="320x240"
LD_LIBRARY_PATH=/opt/Qtopia/lib
PATH=/opt/Qtopia/bin:$PATH
e
阅读全文
在ARM上启动Qtopia-2.2.0:
使用USB鼠标的脚本:
#!/bin/sh
HOME=/root
QTDIR=/opt/Qtopia
QPEDIR=/opt/Qtopia
QWS_MOUSE_PROTO="USB:/dev/input/mice" #使用mice可以实现鼠标热插拔,但是触摸屏还会有响应
#QWS_MOUSE_PROTO="USB:/dev/input/mouse1" #鼠标不能实现热插拔,但是触摸屏会停止响应
QWS_KEYBOARD=""
QWS_SIZE="320x240"
LD_LIBRARY_PATH=/opt/Qtopia/lib
PATH=/opt/Qtopia/bin:$PATH
e
阅读全文
smartarm3250 performance
摘要:
以太网性能测试:
测试仪器:SmartBits 6000C
测试结果:20500包/秒,每包46字节,20500846=943000(94.3M),与标称的100M以太网接近,性能相当优秀,得益于LPC3250的AHB阵列。
U盘读写速度:
写:64MB/73.46s 约 871.22KB/S
读:64MB/77.88s 约 821.77KB/S
阅读全文
以太网性能测试:
测试仪器:SmartBits 6000C
测试结果:20500包/秒,每包46字节,20500846=943000(94.3M),与标称的100M以太网接近,性能相当优秀,得益于LPC3250的AHB阵列。
U盘读写速度:
写:64MB/73.46s 约 871.22KB/S
读:64MB/77.88s 约 821.77KB/S
阅读全文
固化文件系统
摘要:
固化jffs2
U-Boot$ tftp 80008000 safe.crmafs
U-boot$ nand erase clean 0x00600000 $(filesize)
U-Boot$ nand write.jffs2 0x80008000 0x00600000 $(filesize)
setenv bootargs root=/dev/mtdblock3 ro console=ttyS0,115200 mem=64M rootfstype=jffs2
使用cramfs作为备份文件系统:
[root@localhost zlg]# mkcramfs rootfs_safe safefs.cramfs
阅读全文
固化jffs2
U-Boot$ tftp 80008000 safe.crmafs
U-boot$ nand erase clean 0x00600000 $(filesize)
U-Boot$ nand write.jffs2 0x80008000 0x00600000 $(filesize)
setenv bootargs root=/dev/mtdblock3 ro console=ttyS0,115200 mem=64M rootfstype=jffs2
使用cramfs作为备份文件系统:
[root@localhost zlg]# mkcramfs rootfs_safe safefs.cramfs
阅读全文
LTIB使用
摘要:
编译Qtopia后还能保留源代码,使用命令:
[chenxibing@localhost ltib]$ ./ltib -p qtopia -m prep
编译某一个软件包:
./ltib -p sqlite -m scbuild
阅读全文
编译Qtopia后还能保留源代码,使用命令:
[chenxibing@localhost ltib]$ ./ltib -p qtopia -m prep
编译某一个软件包:
./ltib -p sqlite -m scbuild
阅读全文
Enable SSH Server
摘要:
在etc/rc.d/rcS文件中增加配置IP的命令:
ifconfig eth0 192.168.7.236
同时开启SSH服务:
/etc/rc.d/init.d/sshd start
第一次执行时间较长,因为会产生一些rsa文件。
更好的方法:
在/etc/rc.d/rc.conf文件的cfg_servers中增加sshd
all_services="mount-proc-sys mdev udev hostname devfsd depmod modules filesystems syslog network inetd portmap dropbear sshd boa smb dhcpd settime qtopia watchdog gtk2 pango"
all_services_r="pango gtk2 watchdog qtopia settime dh
阅读全文
在etc/rc.d/rcS文件中增加配置IP的命令:
ifconfig eth0 192.168.7.236
同时开启SSH服务:
/etc/rc.d/init.d/sshd start
第一次执行时间较长,因为会产生一些rsa文件。
更好的方法:
在/etc/rc.d/rc.conf文件的cfg_servers中增加sshd
all_services="mount-proc-sys mdev udev hostname devfsd depmod modules filesystems syslog network inetd portmap dropbear sshd boa smb dhcpd settime qtopia watchdog gtk2 pango"
all_services_r="pango gtk2 watchdog qtopia settime dh
阅读全文
Qtopia2 编译
摘要:
编译Qtopia的时候配置了使用鼠标的选项:
[*] Use usb mouse instead of touchscreen in qtopia by default
同时内核使能了USB HID等,已经插入了USB光学鼠标,在内核中已经看到了鼠标:
[root@nxp root]# ls /dev/input/by-id/usb-15ca_USB_Optical_Mouse-event-mouse -la
lrwxrwxrwx 1 root root 9 Jan 1 00:18 /dev/input/by-id/usb-15ca_USB_Optical_Mouse-event-mouse - ../event1
另外,使用cat命令读取/dev/input/event1,触动鼠标,能够看到有信息。
阅读全文
编译Qtopia的时候配置了使用鼠标的选项:
[*] Use usb mouse instead of touchscreen in qtopia by default
同时内核使能了USB HID等,已经插入了USB光学鼠标,在内核中已经看到了鼠标:
[root@nxp root]# ls /dev/input/by-id/usb-15ca_USB_Optical_Mouse-event-mouse -la
lrwxrwxrwx 1 root root 9 Jan 1 00:18 /dev/input/by-id/usb-15ca_USB_Optical_Mouse-event-mouse - ../event1
另外,使用cat命令读取/dev/input/event1,触动鼠标,能够看到有信息。
阅读全文
待机LCD黑屏问题
摘要:
关于LCD10分钟后自动灭的问题,可以通过很多方法使其不灭:
E.g. add below lines in qtopia file:
export QWS_HIDE_CURSOR="Yes"
if [ -c /dev/tty0 ]; then
echo -e -n '\033[?25l' /dev/tty0
echo -e -n '\033[9]' /dev/tty0
fi
if [ -c /dev/vc/0 ]; then
echo -e -n '\033[?25l' /dev/vc/0
echo -e -n '\033[9]' /dev/vc/0
fi
# remove pointercal if it is empty
但目前没有找到好的方法可以使其关闭后通过输入事件再打开。
阅读全文
关于LCD10分钟后自动灭的问题,可以通过很多方法使其不灭:
E.g. add below lines in qtopia file:
export QWS_HIDE_CURSOR="Yes"
if [ -c /dev/tty0 ]; then
echo -e -n '\033[?25l' /dev/tty0
echo -e -n '\033[9]' /dev/tty0
fi
if [ -c /dev/vc/0 ]; then
echo -e -n '\033[?25l' /dev/vc/0
echo -e -n '\033[9]' /dev/vc/0
fi
# remove pointercal if it is empty
但目前没有找到好的方法可以使其关闭后通过输入事件再打开。
阅读全文
TTY and Login
摘要:
选中boot up with a tty and login,并设置inittab参数为 ::respawn:-/sbin/getty -L console 115200,即可实现启动过程中出现登录界面。配置如下:
(nxp) target hostname
[*] boot up with a tty and login
(::respawn:-/sbin/getty -L console 115200) Enter your inittab
阅读全文
选中boot up with a tty and login,并设置inittab参数为 ::respawn:-/sbin/getty -L console 115200,即可实现启动过程中出现登录界面。配置如下:
(nxp) target hostname
[*] boot up with a tty and login
(::respawn:-/sbin/getty -L console 115200) Enter your inittab
阅读全文
SJA1000 CAN驱动
摘要:
硬件资源
片选,使用了nCS2,根据LPC3250的存储器MAP:
Four static memory banks, 16 MB each:
EMC_CS0 0xE000 0000 ~ 0xE0FF FFFF
EMC_CS1 0xE100 0000 ~ 0xE1FF FFFF
EMC_CS2 0xE200 0000 ~ 0xE2FF FFFF
EMC_CS3 0xE300 0000 ~ 0xE3FF FFFF
阅读全文
硬件资源
片选,使用了nCS2,根据LPC3250的存储器MAP:
Four static memory banks, 16 MB each:
EMC_CS0 0xE000 0000 ~ 0xE0FF FFFF
EMC_CS1 0xE100 0000 ~ 0xE1FF FFFF
EMC_CS2 0xE200 0000 ~ 0xE2FF FFFF
EMC_CS3 0xE300 0000 ~ 0xE3FF FFFF
阅读全文
Beep Driver
摘要:
蜂鸣器驱动,基于miscdevice子系统。
beepdrv.c
阅读全文
蜂鸣器驱动,基于miscdevice子系统。
beepdrv.c
阅读全文
I2S UDAl1380
摘要:
这是PHY3250的驱动,使用UDA1380芯片。
问题:不能播放mp3
已经在内核中配置了声卡:
CONFIG_SND_SOC=y
CONFIG_SND_LPC3XXX_SOC=y
CONFIG_SND_LPC3XXX_SOC_I2S=y
CONFIG_SND_LPC32XX_USEI2S1=y
CONFIG_SND_LPC3XXX_SOC_I2S_UDA1380=y
CONFIG_SND_SOC_UDA1380=y
在启动信息中也已经看到了声卡:
Advanced Linux Sound Architecture Driver Version 1.0.17.
ASoC version 0.13.2
UDA1380 Audio Codec 0.6asoc: UDA1380 lpc3xxx-i2s1 mapping ok
ALSA device l
阅读全文
这是PHY3250的驱动,使用UDA1380芯片。
问题:不能播放mp3
已经在内核中配置了声卡:
CONFIG_SND_SOC=y
CONFIG_SND_LPC3XXX_SOC=y
CONFIG_SND_LPC3XXX_SOC_I2S=y
CONFIG_SND_LPC32XX_USEI2S1=y
CONFIG_SND_LPC3XXX_SOC_I2S_UDA1380=y
CONFIG_SND_SOC_UDA1380=y
在启动信息中也已经看到了声卡:
Advanced Linux Sound Architecture Driver Version 1.0.17.
ASoC version 0.13.2
UDA1380 Audio Codec 0.6asoc: UDA1380 lpc3xxx-i2s1 mapping ok
ALSA device l
阅读全文

浙公网安备 33010602011771号