linux系统构建基础学习笔记——操作

linux系统构建

********************************************************
                  ---交叉编译环境构建---


安装arm-linux-gcc-4.3.2 (交叉编译器)

tar xzvf arm-linux-gcc-4.3.2.tgz -C /
cd /usr/local/arm/4.3.2/bin
./arm-linux-gcc -v
在/etc/bashrc文件的最后添加如下一行:
   export PATH=/usr/local/arm/4.3.2/bin:$PATH
source /etc/bashrc
echo $PATH
arm-linux-gcc test.c -o test_arm
file test_arm


mini2440模拟器的安装:qemu

如果你的系统中没有zlib,先安装zlib-1.2.7.tar.gz
cp zlib-1.2.7.tar.gz /opt
tar xzvf zlib-1.2.7.tar.gz
cd zlib-1.2.7
 ./configure --prefix=/usr
make
make install


安装qemu:
cp mini2440-HEAD1.tar.gz /opt
tar xzvf mini2440-HEAD1.tar.gz
cd mini2440
./configure --target-list=arm-softmmu,arm-linux-user --disable-gfx-check --disable-sdl
make
make install
qemu-arm -L /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/ ~/test_arm


tftp安装
rpm -ivh xinetd-2.3.14-18.fc9.i386.rpm
rpm -ivh tftp-server-0.48-3.fc9.i386.rpm
rpm -ivh tftp-0.48-3.fc9.i386.rpm
rpm -qa | grep tftp
 tftp-0.48-3.fc9
   tftp-server-0.48-3.fc9
修改配置文件:/etc/xinetd.d/tftp
 server_args = -s /mnt/hgfs/LinuxShared/mytftp -c
 disable  = no

/etc/init.d/xinetd start

连接:ftp 192.168.1.230


解压安装构建源代码和应用程序
mkdir -p /opt/FriendlyARM/mini2440

将所有资源拷贝到/mnt/hgfs/LinuxShared/mini2440soft目录。

进入linux的/opt/FriendlyARM/mini2440目录下:

解压启动引导程序源代码
tar xzvf /mnt/hgfs/LinuxShared/mini2440soft/vboot-src-20100106.tar.gz
tar xzvf /mnt/hgfs/LinuxShared/mini2440soft/bootloader.tgz
tar xzvf /mnt/hgfs/LinuxShared/mini2440soft/tekkamanninja-U-boot-2009.11_tekkaman- 16deca6.tar

解压linux内核源代码:
  tar xzvf /mnt/hgfs/LinuxShared/mini2440soft/linux-2.6.32.2-mini2440-20100113.tgz
 
解压文件系统工具源代码busybox
tar xzvf /mnt/hgfs/LinuxShared/mini2440soft/busybox-1.13.3-mini2440.tgz
解压目标文件系统源代码
tar xzvf /mnt/hgfs/LinuxShared/mini2440soft/root_qtopia-20100108.tar.gz

解压qt工具源代码
tar xzvf /mnt/hgfs/LinuxShared/mini2440soft/x86-qtopia-20100108.tar.gz
tar xzvf /mnt/hgfs/LinuxShared/mini2440soft/arm-qtopia-20100108.tar.gz

解压测试实例程序源代码
tar xzvf /mnt/hgfs/LinuxShared/mini2440soft/examples-20100108.tar.gz

安装目标文件系统映象制作工具mkyaffs2image
tar xzvf /mnt/hgfs/LinuxShared/mini2440soft/mkyaffs2image.tgz -C /
usr/sbin/mkyaffs2image
usr/sbin/mkyaffs2image-128M

安装logo制作工具LogoMaker
tar xzvf /mnt/hgfs/LinuxShared/mini2440soft/logomaker.tgz -C /
usr/sbin/logomaker

解压安装完成以后,在linux下就准备了进行linux定制所需要的所有的源代码
arm-qtopia  busybox-1.13.3  linux-2.6.32.2             vboot
bootloader  examples        root_qtopia(有不一样)     x86-qtopia


安装配置nfs服务器
设置共享目录,在/etc/exports文件中加入如下一行:
/opt/FriendlyARM/mini2440/root_qtopia *(rw,sync,no_root_squash)
*:  所有客户机都可以挂接此目录
rw:挂接此目录的客户机对该目录有读写权限。
no_root_squash:允许挂接此目录的客户机享有该主机的root身份

关闭防火墙:
service iptables status
service iptables stop

启动nfs服务:
/etc/init.d/nfs start
/etc/init.d/nfs restart

测试:
在本机上挂载nfs
[root@localhost sysconfig]# mount -t nfs 127.0.0.1:/opt/FriendlyARM/mini2440/root_qtopia /mnt
[root@localhost sysconfig]# ls /mnt
bin  etc   lib      mnt  proc  sbin  tmp  var
dev  home  linuxrc  opt  root  sys   usr  www
可以看到/mnt目录下的内容和/opt/FriendlyARM/mini2440/root_qtopia/目录下的内容完全一致

用开发板测试:
1.Nand Flashi启动,开机时按k1-k6任意按键进入vivi交互命令模式
2.Nor Flash启动,进入Suppervivi主功能菜单模式,输入q,进入Suppervivi交互命令模式,输入:
Supervivi> param set linux_cmd_line "console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.188:/opt/FriendlyARM/mini2440/root_qtopia ip=192.168.1.230:192.168.1.188:192.168.1.188:255.255.255.0:sbc2440.arm9.net:eth0:off"

param :参数
set linux_cmd_line:设置linux启动时的命令参数
      console=ttySAC0 :使用控制字符终端ttySAC0
      nfsroot:开发主机的ip+共享的启动文件系统目录
 ip=目标板的ip+开发主机的ip+目标板上网关+子网掩码+开发主机名字+网卡名字

输入boot启动系统。


********************************************************
                    ---U-boot定制---

已经移植好的MINI2440的UBOOT软件包:
tekkamanninja-U-boot-2009.11_tekkaman-16deca6.tar.gz

使用步骤:
cp /mnt/hgfs/LinuxShared/tekkamanninja-U-boot-2009.11_tekkaman-16deca6.tar.gz  /opt
tar -xzvf tekkamanninja-U-boot-2009.11_tekkaman-16deca6.tar.gz
mv tekkamanninja-U-boot-2009.11_tekkaman-16deca6.tar.gz   tekkamanninja-U-boot-2009.11
修改顶层Makefile文件
#CROSS_COMPILE = arm-tekkaman-linux-gnueabi-
CROSS_COMPILE = arm-linux-
在顶层:
make mini2440_config
make
生成uboot.bin文件
下载:1.NorFlash启动,Supervivi引导,选择【a】下载到NandFlash中(而【d】只下载到内存中)
 2.NandFlash启动。。。(按CTRL+C进入shell状态)


在u-boot中建立自己的设备:
   1.建文件夹
cd  /opt/FriendlyARM/mini2440 /tekkamanninja-U-boot-2009.11
cd board/samsung/
mkdir my2440
2.拷贝资源
cp -rf ../tekkamanninja/mini2440/* my2440/
3.修改资源中的.c文件名
mv mini2440.c my2440.c
4.复制.h头文件,并改为自己的名字
cd ../../../
#cp    include/configs/mini2440.h    include/configs/my2440.h

     5.修改my2440下的Makefile:
  # COBJS := nand_read.o mini2440.o  flash.o
  COBJS := nand_read.o my2440.o  flash.o


     6.修改顶层的Makefile:
   增加:
     my2440_config : unconfig
   @$(MKCONFIG) $(@:_config=) arm arm920t my2440 samsung s3c24x0

         arm: CPU的架构(ARCH)
 arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。
 my2440: 开发板的型号(BOARD),对应于board/my2440目录。可以依自己的喜好修改
 samsung: 开发者/或经销商(vender)。 my2440的父目录,可以写成NULL
         s3c24x0: 片上系统(SOC)。
 
   7.在顶层下,编译生成u-boot.bin文件:
   (在之前需要先编译一下mini2440_config,在tekkaman/mini2440/生成一些.o文件)
   make my2440_config
   make


修改u-boot源代码,是得生成的u-boot适应于自己的开发板。
 
          1.修改cpu/arm920t/start.S
     cd /opt/FriendlyARM/mini2440/tekkamanninja-U-boot/cpu/arm920t
          gedit start.S
 修改该文件,在启动的时候增加自己开发板对led的控制
 /*
 @ bl coloured_LED_init
 @ bl red_LED_on
 */
 ...
 增加自己的代码
 ...


      使用Supervivi下载时已经对CPU和RAM进行了初始化
 如果将u-boot下载到NandFlash中并直接从NandFlash中启动(【a】下载),应该有cpu初始化。
 此时注释,运行时能看到前面的代码修改后的效果,但不能继续启动。
 #ifndef CONFIG_SKIP_LOWLEVEL_INIT
  //bl cpu_init_crit
 #endif


 2.修改:lib_arm/board.c
 
 #if defined(CONFIG_MINI2440_LED)  
  //gpio->GPBDAT = 0x0; //tekkamanninja
 #endif

    重新编译下载执行

 

 


********************************************************
                ---Linux内核配置与编译---

1.*清理:
 make clean:清除产生的文件,保留配置文件
 make mrproper:清除所有产生文件和配置文件
 make distclean:mrproper+清除备份和补丁
2.配置:(用来生成.config文件编译方案)
(在做好了的内核目录中,有config_mini2440_x35,直接复制成.config即可)
make config:交互式配置
make oldconfig:是有已有配置文件(.config)
make xconfig :图形化配置
make menuconfig:菜单型配置
[] 单选,按空格选择
<> 三选,按y,m,n或空格选择
-* -必选
h为帮助,ESC返回上层菜单

3.编译内核:
make zImage:压缩的vmlinux
make uImage :U-boot用
make modules

 

定制自己的linux系统:

一、搭建环境

1.修改根目录下下Makefile文件:
   export KBUILD_BUILDHOST := $(SUBARCH)
  # 指定内核运行的平台环境和交叉编译器
  ARCH  ?= arm
  CROSS_COMPILE ?= arm-linux-


2.执行mini2440默认配置,使得.config按照默认设置配置。
 make mini2440_defconfig

3.编译一下,看是否有问题
make 

4.删除arch/arm/mach-s3c2440/mini2440.c ,拷贝mach-smdk2440.c
 mv mini2440.c mini2440.c.bak
 cp arch/arm/mach-s3c240/mach-smdk2440.c  mach-mini2440

5.修改mini2440.c:
   gedit mini2440.c
 1.修改开发板信息:
  MACHINE_START(MINI2440, "mini2440 liaoyi")

 2.修改系统时钟
  s3c24xx_init_clocks(12000000);

 3.将代码中的所有的smdk2440全部替换为mini2440

 4.注释掉
  //smdk_machine_init();  //smdk的初始化


  6.在make menuconfig中显示:
  gedit  arch/arm/mach-s3c2440/Kconfig
    config MACH_MINI2440
 bool "Mini2440 Liaoyi"
 select CPU_S3C2440
 select S3C2440_XTAL_12000000
 select S3C_DEV_USB_HOST
 select S3C_DEV_NAND
 help
 meke menuconfig->General setup->s3c2440 Machines -> MINI2440 development board
 *修改的内容在开发板中加载系统以后,使用cat /proc/cpuinfo可以在hardware项下看到

  7.将mini2440.c生成的mini2440.o实际编译进内核
   gedit arch/arm/mach-s3c2440/Makefie
       obj-$(CONFIG_MACH_MINI2440) += mach-mini2440.o

 8.再次make mini2440_defconfig -> make 看修改是否有问题。

 

二、定义系统硬件资源驱动部分

 1.新增Nandflash
  //新增nandflash分区信息
   static struct mtd_partition friendly_arm_default_nand_part[] = {
 [0] = {
  .name = "supervivi",    //定义一个系统启动代码分区
  .size = 0x00040000,     //分区大小256K
  .offset = 0,
 },
 [1] = {
  .name = "param",        //启动代码参数分区
  .offset = 0x00040000,   //参数分区紧跟在启动分区的后面
  .size = 0x00020000,     //参数分区的大小为128K
 },
 [2] = {
  .name = "Kernel",       //内核分区
  .offset = 0x00060000,   //紧跟在参数分区的后面
  .size = 0x00500000,     //大小5M,在当前NANDFLASH下
 },
 [3] = {
  .name = "root",         //根文件系统
  .offset = 0x00560000,
  .size = 1024 * 1024 * 1024, //1G,实际有多大是有具体的nandflash芯片来确定的
 },
 [4] = {
  .name = "nand",
  .offset = 0x00000000,    //整个nandflash大小为1G,所以使用本分区表能够管理的最大的                                   nandflash就是1G
  .size = 1024 * 1024 * 1024, //1G
 }
   };

static struct s3c2410_nand_set friendly_arm_nand_sets[] = {
 [0] = {
  .name  = "NAND",
  .nr_chips = 1,
  .nr_partitions = ARRAY_SIZE(friendly_arm_default_nand_part),
  .partitions = friendly_arm_default_nand_part,
 },
};

/* choose a set of timings which should suit most 512Mbit
 * chips and beyond.
*/

static struct s3c2410_platform_nand friendly_arm_nand_info = {
 .tacls  = 20,
 .twrph0  = 60,
 .twrph1  = 20,
 .nr_sets = ARRAY_SIZE(friendly_arm_nand_sets),
 .sets  = friendly_arm_nand_sets,
 .ignore_unset_ecc = 1,
};

//把nand flash设备注册到系统中
static struct platform_device *mini2440_devices[] __initdata = {
 &s3c_device_usb,
 &s3c_device_lcd,
 &s3c_device_wdt,
 &s3c_device_i2c0,
 &s3c_device_iis,
 &s3c_device_nand,  //新增加一行对nandflash的支持
};

2.移植yaffs2文件系统
如果内核代码中没有yaffs2
cd yaffs2
./patch-ker.sh c /opt/FriendlyARM/mini2440/linux-2.6.32.2
cd   linux-2.6.32.2/fs  多了一个yaffs2目录

make menuconfig
    File System ->Miscellaneous filesystems ->yaffs2

 

make zImage
下载:
supervivi  ‘k‘
           ‘y‘

 

 


********************************************************
                  ---文件系统定制---


文件系统的定制

文件系统的构建所需文件:
busyBox:集成压缩了许多linux工具和命令。
root_qtopia:提供了文件系统所需的库文件。
Mkyaffs2image:yaffs文件系统制作工具(解压在usr/bin中)(在yaffs2中也有)。


1.创建自己定制的文件系统的目录结构
  创建顶层目录
   mkdir studyarm
   cd studyarm
   mkdir root bin sbin dev etc boot tmp var usr sys proc lib mnt home


  创建子目录
  mkdir etc/init.d  etc/rc.d  etc/sysconfig
  mkdir usr/sbin usr/bin usr/lib usr/modules
  mkdir var/lib var/lock var/run var/tmp
 
  创建设备文件
  mknod -m 600 dev/console c 5 1
  mknod -m 600 dev/null c 1 3
  ls dev
     console  null

  修改var和var/tmp的目录属性
  chmod 1777 tmp
  chmod 1777 var/tmp
 
2.完成库文件的定制
  切换到mini2440资源目录,对根文件系统代码进行解压
  cd  root_qtopia
  cp -rfd  lib/* /opt/studyarm/lib/

3.编译配置busuybox
  cd busybox-1.13.3

  修改Makefile文件
   # 修改交叉编译工具
   CROSS_COMPILE ?=arm-linux-

   # ARCH ?= $(SUBARCH)
   ARCH ?=arm

  修改config文件
  cp fa.config .config
  make menuconfig
  make
  make CONFIG_PREFIX=/opt/studyarm install
  busybox的相关命令工具会自动安装到studyarm下的/bin,/sbin,/usr/bin里面。
  完成上述操作以后,自己定制的文件系统中的命令(/bin, /sbin, /usr/bin, /usr/sbin目录下的命令)都准备好了

4.文件系统中配置文件的制作
  拷贝几个主机的配置文件作为定制系统的配置文件
  cd etc
  cp /etc/passwd ./
  cp /etc/shadow ./
  cp /etc/group ./
  touch mdev.conf
  ls
  group  init.d  mdev.conf  passwd  rc.d  shadow  sysconfig
 
  编写下面的配置文件
  touch sysconfig/HOSTNAME
  gedit sysconfig/HOSTNAME
  在文件中加入主机名

  etc/inittab 文件
  ::sysinit:/etc/init.d/rcS
  console::askfirst:-/bin/sh
  ::ctrlaltdel:/sbin/reboot
  ::shutdown:/bin/umount -a -r

  实现/etc/init.d/rcS
  cp /mnt/hgfs/LinuxShared/RCS  etc/init.d/rcS

  实现fstab
  gedit fstab
  内容如下
  #device mount-point   type  option   dump fsck order
  proc /proc proc default 0 0
  none /tmp ramfs default 0 0
  sysfs /sys sysfs default 0 0
  mdev /dev ramfs default 0 0

  实现etc/profile文件
  内容如下
  #A sh profile

  USER=“filesystest"
  LOGNAME=$USER
  PS1=‘[\u@\h\W]\$‘
  PATH=$PATH
  HOSTNAME=‘/bin/hostname‘
  export USER LOGNAME PS1 PATH


5.制作文件系统映像
 
  mkyaffs2image-128M rootfs rootfs.img
  注意:要在rootfs的上一层目录中操作,另外rootfs中要删除不必要的文件root_qtopia等,不然生成的文件  系统会很大。
  生成的img就是可以下载到开发板上的文件系统的映像
  ll rootfs.img
  -rw------- 1 root root 5964288 09-16 17:11 rootfs.img

 


********************************************************
                  ---系统综合---
Supervivi的使用:

[x] format NAND FLASH for Linux
[v] Download vivi                           USB下载Supervivi到NandFlash的vivi区
[k] Download linux kernel              USB下载系统内核到NandFlash的kernel区
[y] Download root_yaffs image     USB下载yaffs文件系统到NandFlash的root区
[a] Absolute User Application        USB下载u-boot到NandFlash的vivi区
[n] Download Nboot for WinCE
[l] Download WinCE boot-logo
[w] Download WinCE NK.bin
[d] Download & Run                       USB下载至内存(option中指定地址)并启动(裸机驱动中使用过)
[z] Download zImage into RAM
[g] Boot linux from RAM
[f] Format the nand flash
[b] Boot the system                         启动系统(根据启动参数启动)
[s] Set the boot parameters            设置启动参数->子菜单
[u] Backup NAND Flash to HOST through USB(upload)
[r] Restore NAND Flash from HOST through USB
[q] Goto shell of vivi                           进入vivi的shell命令交互模式(按menu返回主功能菜单模式)
[i] Version: 1138-2K


NOR Flash启动,只能是Supervivi引导,此时能用dnw或超级终端或securecRT的串口进行通信和(启动,格   式化等)操作,也可以设置用网线来nfs网络文件系统来启动。
   注意:dnw在系统启动后进入shell的操作时乱码,而超级终端和secureCRT正常。
   启动系统后还可以用串口,用网线(tftp,nfs)进行传输文件
   但是如果要下载,只能用dnw的USB下载到NandFlash或内存(d)。
   

NandFlsh启动,在Supervivi引导下输入q进入shell命令模式,可用secureCRT(网络)加载NFS网络文件系统
    正常启动linux后,可通过超级终端(串口)或secureCRT(串口)/secureCRT(网线)传输文件  (tftp,NFS)
            
   如果是u-boot引导加载,用网络(nfs或tftp)可加载主机的kernel或文件系统到内存启动,也  可以直接写到NandFlash中。


按光盘中的默认映像文件下载

NorFlash启动,Supervivi引导,用dnw,通过USB下载到NandFlash

1.下载文件系统(v):supervivi-128M

2.下载内核(k):zImage_X35

3.下载图形文件系统(y):rootfs_qtopia_qt4.img

用Supervivi下的b(boot)命令启动,第一次要屏幕校准。

 

启动linux后,实现主机与开发板的文件传输:

方式一:通过串口
 接收文件:rz
 发送文件:sz
  [root@FriendlyARM /]# rz
  在菜单中选择window下的一个文件
  成功后,在根目录下会出现该文件。
  [root@FriendlyARM /]# sz hj.sh
 

方式二:通过网络(tftp)
  用ftp-server在window下共享一个目录。设置好用户和密码。
  Kernel 2.6.32.2-FriendlyARM on (/dev/pts/0)
  FriendlyARM login: root
  [root@FriendlyARM /]# ls
  [root@FriendlyARM /]# ftp 192.168.1.10
  Connected to 192.168.1.10.
  220 Serv-U FTP Server v6.1 for WinSock ready...
  Name (192.168.1.10:root): liao
  331 User name okay, need password.
  Password:
  230 User logged in, proceed.
  Remote system type is UNIX.
  Using binary mode to transfer files.
  ftp> ls
  ftp> get xiangtangprsget.c
  local: xiangtangprsget.c remote: xiangtangprsget.c
  200 PORT Command successful.
  150 Opening BINARY mode data connection for xiangtangprsget.c (6608 Bytes).
  226 Transfer complete.
  6608 bytes received in 0.0213 secs (3e+02 Kbytes/sec)
  ftp> bye
  221 Goodbye!
  [root@FriendlyARM /]# ls
  addressbook.txt    linuxrc            sbin
  bin                lost+found         sys
  dev                mnt                tmp
  etc                opt                usr
  hj.sh              proc               var
  home               rcs                www
  lib                root               xiangtangprsget.c


Supervivi下,启动nfs网络文件系统:
1.主机linux安装配置nfs(前面有介绍)
2.主机linux下启动nfs服务
  [root@localhost root_qtopia]# /etc/init.d/nfs start

3.主机的ip地址和开发板配置在相同的网段,并保证两者之间的网络能够直接连通(把虚拟机的网络连接方式设置为桥接)
  [root@localhost root_qtopia]# ifconfig eth4 192.168.1.188 netmask 255.255.255.0
  [root@localhost root_qtopia]# ping 192.168.1.230
4.开发板启动进入suppervivi命令提示符下
  在Supervivi模式下输入如下命令
  Supervivi> param set linux_cmd_line "console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.188:/opt/FriendlyARM/mini2440/root_qtopia ip=192.168.1.230:192.168.1.188:192.168.1.1:255.255.255.0:mini2440.arm9.net:eth0:off"
  其中 ,param set linux_cmd_line 是设置启动 linux 时的命令参数。其各参数的含义  如下:
  nfsroot 是自己开发主机的IP 地址。
  “ip=”后面:
  第一项(192.168.1.230)是目标板的临时IP(注意不要和局域网内其他IP 冲突);
  第二项(192.168.1.112)是开发主机的IP;
  第三项(192.168.1.1)是目标板上网关(GW)的设置;
  第四项(255.255.255.0)是子网掩码;
  第五项是开发主机的名字(一般无关紧要,可随便填写)
  eth0 是网卡设备的名称--开发板的网卡。

  Supervivi> boot

  注意:启动的是我们虚拟机中linux系统下的nfs共享目录下的文件系统

 

U-boot的使用:
  将自己定制的uboot下载到开发板上--将开发板启动方式设置为nor启动,输入a,下载uboot,再将开发板的   启动方式设置为nand,启动系统,按CTL+C进入uboot
  [u-boot@MINI2440]# printenv
  bootargs=noinitrd root=/dev/nfs rw nfsroot=192.168.0.1:/home/tekkaman/working/nfs/rootfs ip=192.168.0.2:192.168.0.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
  bootcmd=nfs 0x30008000 192.168.0.1:/home/tekkaman/working/nfs/zImage.img;bootm
  bootdelay=1
  baudrate=115200
  ethaddr=08:08:11:18:12:27
  ipaddr=192.168.0.2
  serverip=192.168.0.1
  gatewayip=192.168.0.1
  netmask=255.255.255.0
  tekkaman=bmp d 70000
  stdin=serial
  stderr=serial
  ethact=dm9000

  环境变量的设置
  [u-boot@MINI2440]# setenv ipaddr 192.168.1.230
  [u-boot@MINI2440]# printenv
bootargs=noinitrd root=/dev/nfs rw nfsroot=192.168.0.1:/home/tekkaman/working/nfs/rootfs ip=192.168.0.2:192.168.0.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
bootcmd=nfs 0x30008000 192.168.0.1:/home/tekkaman/working/nfs/zImage.img;bootm
bootdelay=1
baudrate=115200
ethaddr=08:08:11:18:12:27
serverip=192.168.0.1
gatewayip=192.168.0.1
netmask=255.255.255.0
tekkaman=bmp d 70000
 stdin=serial
stdout=serial
stderr=serial
ethact=dm9000
ipaddr=192.168.1.230

Environment size: 472/131068 bytes
[u-boot@MINI2440]# setenv serverip 192.168.1.10
[u-boot@MINI2440]# printenv
bootargs=noinitrd root=/dev/nfs rw nfsroot=192.168.0.1:/home/tekkaman/working/nfs/rootfs ip=192.168.0.2:192.168.0.1::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
bootcmd=nfs 0x30008000 192.168.0.1:/home/tekkaman/working/nfs/zImage.img;bootm
bootdelay=1
baudrate=115200
ethaddr=08:08:11:18:12:27
gatewayip=192.168.0.1
netmask=255.255.255.0
tekkaman=bmp d 70000
 stdin=serial
stdout=serial
stderr=serial
ethact=dm9000
ipaddr=192.168.1.230
serverip=192.168.1.10

Environment size: 473/131068 bytes

环境变量设置完成只是当次有效,如果需要永久有效,需要使用saveenv命令来保存对于环境变量的设置进入nandflash中
[u-boot@MINI2440]# saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x6000000000002 --   0% complete.
Writing to Nand... done

[u-boot@MINI2440]# ping 192.168.1.10
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
host 192.168.1.10 is alive


uboot引导系统内核
1.制作uboot引导的内核映像文件uImage
  mkimage –n ‘newer’ –A arm –O linux –T kernel –C none –a 0x30008000 –e 0x30008040  –d zImage uImage
  -n 指定映像的名字 -- newer
  -A 指定平台体系结构 -- arm
  -O 指定操作系统的类型 -- linux
  -T 指定映像类型  -- kernel
  -C 指定压缩方式 --none -- 不压缩
  -a 指定映像在内存中的位置 -- 最后下载到系统中的位置
  -e 指定映像的运行入口地址 -- 下载地址加64字节
  -d 指定制作映像的源文件
  mkimage -n ‘testimage‘ -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage_T35 myuImage
 
  先将uboot下tools目录中的mkimage拷贝到系统目录
  [root@localhost tools]# cp mkimage /bin
  [root@localhost tools]# cd /opt/FriendlyARM/mini2440/root_qtopia/
  [root@localhost root_qtopia]# mkimage -n ‘testimage‘ -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage_T35 myuImage
  Image Name:   testimage
  Created:      Wed Sep 18 11:08:38 2013
  Image Type:   ARM Linux Kernel Image (uncompressed)
  Data Size:    2517028 Bytes = 2458.04 kB = 2.40 MB
  Load Address: 30008000
  Entry Point:  30008040
  [root@localhost root_qtopia]# ls
  bin   linuxrc   root        tmp         zImage_T35
  dev   mnt       rootfs.img  u-boot.bin
  etc   myuImage  sbin        usr
  home  opt       sys         var
  lib   proc      test        www
  *也可以直接在内核源代码目录下使用make uImage命令直接生成uImage文件


  2.通过nfs下载内核映像到内存并运行
  # nfs 30008000 192.168.1.188:/opt/FriendlyARM/mini2440/root_qtopia
/myuImage
  # bootm 30008000
  也可以使用nfs下载内核到内存,保存到nandflash中
  # nfs 30008000 192.168.1.188:/opt/FriendlyARM/mini2440/root_qtopia
/myuImage
  # nand erase 0x80000 0x300000
  # nand write 0x30008000 0x80000 0x300000
  # nand read 0x30008000 0x80000 0x300000
  # bootm 0x30008000
  通过上述命令已经将内核映像下载到nandflash中,以后每一次运行uboot以后都可以通过nand read将nandflash中的内核读入到内存中,然后使用bootm来加载内核系统


  3.uboot烧入文件系统
  setenv bootargs noinitrd root=/dev/mtdblock3 rootfstype=yaffs2 rw console=ttySAC0,115200 init=/linuxrc mem=64M


通过uboot使用nfs引导主机上的内核和文件系统
  设置uboot的命令
  [u-boot@MINI2440]# setenv bootcmd nfs 0x30008000 192.168.1.188:/opt/FriendlyARM/mini2440/root_qtopia
/myuImage\; bootm 0x30008000
  [u-boot@MINI2440]# setenv bootargs noinitrd root=/dev/nfs rw nfsroot =192.168.1.188:/opt/FriendlyARM/mini2440/root_qtopia ip=192.168.1.230:192.168.1.188:192.168.1.1:255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
  [u-boot@MINI2440]# boot

 


移植QT到目标板
 添加触摸屏支持库
 tar jxf tslib-1.4.tar.bz2
 cd tslib
 
 ./autogen.sh
 ./configure --prefix=/usr/local/arm/qte/tslib
          --host=arm-linux
          ac_cv_func_malloc_0_nonnull=yes
 
 make
 make install

 移植QT到目标板
 tar zxf qt-everywhere-opensource-src-4.6.2.tar.gz
 cd qt-everywhere-opensource-src-4.6.2

 配置QT
 ./configure -prefix /usr/local/arm/qte/4.6.2 \
     -no-qt3support  \
     -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg \
     -no-openssl -no-cups -no-iconv -embedded arm \
     -xplatform qws/linux-arm-g++  \
     -qt-mouse-tslib -little-endian \
     -I/usr/local/arm/qte/tslib/include \
     -L/usr/local/arm/qte/tslib/lib \
     -nomake examples -nomake demos

 编译QT
 make

 安装QT
 make install

 设置开发库路径
   PATH=/usr/local/arm/qte/4.6.2/bin:$PATH

 进行交叉编译
 qmake -project
 qmake
 make

-------------------------------------------------------------------------------
注意:
export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0",在移植的所有工作都完成以后,发现LCD屏上的字体非常小。把其中的数字值都改为其一半的时候,屏上的字体就比较大了。


1. 复制/usr/local/arm/qte/tslib 到 开发板的 /usr/qte下

2. 把/usr/local/arm/qte/4.6.2/lib下对应的LibQtGui.*,  libQtCore.* libQtNetwork.*, libQtsql.*  打包,
然后到开发板根文件系统 /usr/qte/lib下解包

3.  /usr/local/arm/qte/4.6.2/lib/下的 fonts目录也要复制到开发板根文件系统 /usr/qte/lib里

4.然后

#   修改 rootfs/etc/profile ,

添加环境变量
#   export TSLIB_ROOT=/usr/qte/tslib
#   export QTEDIR=/usr/qte/4.6.2
#   export TSLIB_CONSOLEDEVICE=none
#   export TSLIB_FBDEVICE=/dev/fb0
#   export TSLIB_TSDEVICE=/dev/input/event0
#   export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal
#   export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
#   export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
#   export QWS_MOUSE_PROTO=tslib:/dev/input/event0
#   export LD_LIBRARY_PATH=TSLIB_ROOT/lib
#   export POINTERCAL_FILE=$TSLIB_ROOT/etc/pointercal
#   export LIBRARY_PATH=$TSLIB_ROOT/lib:$QTEDIR/lib:$LD_LIBRARY_PATH

5 你把开发板中/usr/qte/tslib/etc/ts.conf

# Uncomment if you wish to use the linux input layer event interface
   module_raw input
中module_raw input前面的空格去掉就可以了。


6.运行/Tslib/bin/ts_calibrate获得校准文件/etc/pointercal
7.运行/Tslib/bin/ts_test 测试触摸屏
至此 Tslib可以测试通过。

8.运行 qttest -qws

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

linux系统构建基础学习笔记——操作,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。