总览
环境及结论
PC linux 建议使用Ubuntu 32bit, 交叉编译工具必须使用 arm-linux-gcc-3.4.5-glibc-2.3.6
设置静态ip uboot 设置静态ip set ipaddr 10.0.0.111 set serverip 10.0.0.138save printenv
嵌入式linux下设置静态ip ifconfig eth0 10.0.0.111 netmask 255.255.255.0 vi /etc/init.d/rcS ifconfig eth0 10.0.0.111
uboot 的编译和烧录 uboot 打补丁和编译 tar xjvf u-boot-1.1.6.tar.bz2 cd u-boot-1.1.6 patch -p1 < ../u-boot-1.1.6_jz2440.patch make clean make 100ask24x0_config make
uboot 的烧录和升级 一般而言, 开发板出厂时已经烧录好可用的uboot. 只要烧录好了uboot, 就不再需要 jLink 或 openJtag 这类烧录工具了! 若要烧录uboot, 可用 jLink 或 openJtag 烧录到norflash中, 略过不表.
基于dnw升级uboot:
[n] Download u-boot to Nand Flash ... Enter your selection: n USB host is connected. Waiting a download. sudo dnw u-boot.bin sudo dnw ./arch/arm/boot/uImage sudo dnw fs_qtopia_ts.yaffs2 sudo dnw leds_0x31000000.bin 0x31000000
或者基于nfs服务升级uboot, 指令较为复杂(dnw方式只是自动化运行这些指令了.):
nfs 30000000 10.0.0.98:/jz2440/u-boot.bin nand erase bootloader nand write.jffs2 30000000 bootloader
kernel 的编译和烧录 kernel 打补丁和编译 tar xjvf linux-2.6.22.6.tar.bz2 cd linux-2.6.22.6 patch -p1 < ../linux-2.6.22.6_jz2440.patch cp ../4.3寸LCD_mach-smdk2440.c arch/arm/mach-s3c2440/mach-smdk2440.c make clean cp config_ok .config make uImage Makefile:1449: *** mixed implicit and normal rules. Stop. vim Makefile
使用 dnw 烧录 kernel 网路配置比较繁琐和复杂, windows的dnw需要安装驱动, 而且会有问题! 因此最便捷的方式就是基于uboot, 使用 linux 的 dnw.确保链接了开发板的串口和usb口, 并把usb口关联到Ubuntu上.
[n] Download u-boot to Nand Flash [o] Download u-boot to Nor Flash [k] Download Linux kernel uImage [j] Download root_jffs2 image [y] Download root_yaffs image [d] Download to SDRAM & Run ... Enter your selection: k USB host is connected. Waiting a download. sudo dnw ./arch/arm/boot/uImage sudo dnw u-boot.bin sudo dnw fs_qtopia_ts.yaffs2 sudo dnw leds_0x31000000.bin 0x31000000
使用 nfs 烧录 kernel 如果配置好网路, 建议使用 nfs 进行烧录
nfs 30000000 10.0.0.98:/jz2440/uImage nand erase kernel nand write.jffs2 30000000 kernel
加载 filesystem 提供了如下几个文件系统
fs_mini.tar.bz2 是最小的根文件系统. 不推荐, 需要手工建立设备节点
fs_mini_mdev.tar.bz2 是最小的根文件系统. 推荐, 启动后使用mdev自动建立设备节点
fs_qtopia.tar.bz2 是JZ2440使用的支持触摸屏的根文件系统
fs_xwindow.tar.bz2 是基于X的根文件系统
这里以 fs_mini_mdev.tar.bz2 为例进行开发. 无UI, shell操作.
制作 filesystem sudo tar xjf fs_mini_mdev.tar.bz2 mkyaffs2image fs_mini_mdev fs_mini_mdev.yaffs
使用 dnw 烧录 filesystem [n] Download u-boot to Nand Flash [o] Download u-boot to Nor Flash [k] Download Linux kernel uImage [j] Download root_jffs2 image [y] Download root_yaffs image [d] Download to SDRAM & Run ... Enter your selection: y USB host is connected. Waiting a download. sudo dnw fs_mini_mdev.yaffs2 sudo dnw u-boot.bin sudo dnw ./arch/arm/boot/uImage sudo dnw leds_0x31000000.bin 0x31000000
使用 nfs 烧录 filesystemnfs 30000000 10.0.0.98:/jz2440/fs_mini_mdev.yaffs2 nand erase root nand write.yaffs 30000000 260000 88AC40 set bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0save reset
直接加载 nfs 文件系统 set bootargs noinitrd root=/dev/nfs nfsroot=10.0.0.98:/fs ip=10.0.0.111:10.0.0.98:10.0.0.138:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0save reset
加载其它nfs文件 为了方便开发调试, 可以加载其它nfs文件到开发板linux中
mkdir /mnt/jz2440 mount -t nfs -o nolock,vers=2 10.0.0.98:/jz2440 /mnt/jz2440 // 开机自动加载nfs文件 mkdir /mnt/jz2440 vi /etc/init.d/rcS mount -t nfs -o nolock,vers=2 10.0.0.98:/jz2440 /mnt/jz2440 ln -s /mnt/jz2440 /jz2440
基于 fs_mini_mdev 制作 qt这部分没有自己验证过 , 步骤繁琐, 不确定是否有问题. 因为本质上和使用最小系统是一样的, 只是加上了图形界面, 这个要到应用层开发UI才会用到!
编译qt依赖的库文件注意修改--prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux
为实际的gcc-3.4.5-glibc-2.3.6绝对路径.
tar xzf jpegsrc.v6b.tar.gz cd jpeg-6b ./configure --enable-shared --enable-static --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux --build=i386 --host=arm vim Makefile CC= arm-linux-gcc AR= arm-linux-ar rc AR2= arm-linux-ranlib make make install-lib tar xzf e2fsprogs-1.40.2.tar.gz cd e2fsprogs-1.40.2 mkdir build cd build../configure --with-cc=arm-linux-gcc --with-linker=arm-linux-ld --enable-elf-shlibs--host=arm-prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux make make install-lib tar xzf zlib-1.2.3.tar.gz cd zlib-1.2.3 ./configure --shared --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux vim Makefile CC=arm-linux-gcc LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1 CPP=arm-linux-gcc -E AR=arm-linux-ar rc RANLIB=arm-linux-ranlib make make install tar xjf libpng-1.2.23.tar.bz2 cd libpng-1.2.23 cp scripts/makefile.linux ./Makefile vim Makefile AR_RC=arm-linux-ar rc CC=arm-linux-gcc RANLIB=arm-linux-ranlib prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux make make install-lib tar xjf tslib-1.3.tar.bz2 cd tslib-1.3 ./autogen.sh echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache./configure --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux vim ./src/ts_read_raw.c char *defaulttseventtype="H3600" ; vim ./plugins/Makefile LDFLAGS :=$(LDFLAGS) -rpath `cd $(PLUGIN_DIR) && pwd ` make make install
制作QT文件系统sudo tar xjf fs_mini_mdev.tar.bz2 sudo cp -rf fs_mini_mdev fs_qtopia cd .../gcc-3.4.5-glibc-2.3.6/arm-linux/lib/cp libpng.so* .../fs_qtopia/lib/ -d cp libjpeg.so* .../fs_qtopia/lib/ -d cp libuuid.so* .../fs_qtopia/lib/ -d cp libz.so* .../fs_qtopia/lib/ -d cd .../tslib-1.3 make prefix=.../fs_qtopia/usr/ install cd .../fs_qtopiacp ./usr/etc/ts.conf ./etc/ vim ./etc/ts.conf module variance xlimit=50 ylimit=50 pthreshold=3 module linear cd .../qtopia/qtopia-free-2.2.0/cp -rf qt2/lib/fonts qtopia/image/opt/Qtopia/lib/ cp -rf qtopia/image/opt/ .../fs_qtopia cd .../fs_qtopiamkdir -p usr/share/zoneinfo/ cp -rf /usr/share/zoneinfo/America usr/share/zoneinfo/ cp /usr/share/zoneinfo/zone.tab usr/share/zoneinfo/ cd .../fs_qtopiavim bin/ts_cal.sh export HOME=/root export QTDIR=/opt/Qtopia export QPEDIR=/opt/Qtopia export QWS_DISPLAY=LinuxFb:/dev/fb0 export QWS_KEYBOARD="TTY:/dev/tty1" export QWS_MOUSE_PROTO="TPanel:/dev/ts0" export PATH=$QPEDIR /bin:$PATH export LD_LIBRARY_PATH=$QPEDIR /lib:$LD_LIBRARY_PATH export TSLIB_TSDEVICE=/dev/ts0 export TSLIB_CONSOLEDEVICE=none export TSLIB_FBDEVICE=/dev/fb0 export TSLIB_CONFFILE=/etc/ts.conf export TSLIB_PLUGINDIR=/usr/share/ts/plugins export TSLIB_TSEVENTTYPE="H3600" /usr/bin/ts_calibrate chmod +x bin/ts_cal.sh cd .../fs_qtopiamkdir -p root vim bin/qpe.sh export HOME=/root export QTDIR=/opt/Qtopia export QPEDIR=/opt/Qtopia export QWS_DISPLAY=LinuxFb:/dev/fb0 export QWS_KEYBOARD="TTY:/dev/tty1" export QWS_MOUSE_PROTO="TPanel:/dev/ts0" export PATH=$QPEDIR /bin:$PATH export LD_LIBRARY_PATH=$QPEDIR /lib:$LD_LIBRARY_PATH export TSLIB_TSDEVICE=/dev/ts0 export TSLIB_CONSOLEDEVICE=none export TSLIB_FBDEVICE=/dev/fb0 export TSLIB_CONFFILE=/etc/ts.conf export TSLIB_PLUGINDIR=/usr/share/ts/plugins export TSLIB_TSEVENTTYPE="H3600" if [ ! -e /etc/pointercal ] then /bin/ts_cal.sh fi $QPEDIR /bin/qpe & chmod +x bin/qpe.sh cd .../fs_qtopiamkdir -p tmp vim etc/fstab tmpfs /tmp tmpfs defaults 0 0 vim etc/init.d/rcS /bin/qpe.sh & 9. 至此, fs_qtopia已经是一个完整的, 可支持QT的根文件系统了. mkyaffs2image fs_qtopia fs_qtopia.yaffs2
编译驱动程序 vim Makefile KERN_DIR = /mnt/nfs/study/jz2440/kernel/linux-2.6.22.6 make arm-linux-gcc -o firstdrvtest firstdrvtest.c insmod first_drv.ko ./firstdrvtest on ./firstdrvtest off
原创于 DRA&PHO