当前位置: 澳门新濠3559 > 操作系统 > 正文

软件包在友善之臂光盘A盘中,就需要用到JTAG接口

时间:2019-10-07 00:26来源:操作系统
1 编译安装QEMU 首先下载qemu for mini2440 一. uboot 和 kernel 的编译烧写 当前使用的环境为 Ubuntu 16.04,用户名为user,我的习惯是在家目录下创建一个 workspace 目录, workspace目录下分别有 ex

1 编译安装QEMU

  1. 首先下载qemu for mini2440

一. uboot 和 kernel 的编译烧写

当前使用的环境为 Ubuntu 16.04 ,用户名为user,我的习惯是在家目录下创建一个 workspace 目录, workspace 目录下分别有 exynos4412( 友善之臂 Cortex-A9 ) 、 i.MX283( 周立功 ARM9 )、stm32( 秉火 Cortex-M ) 等目录,分别是对应的开发板类型。

一、开发板接口接线工具

 开发板与PC机之间可以进行连接的接口通常有四个:串口、JTAG、USB、网络接口。而如今在PC端是没有JTAG或者接口的,因此可以使用转接板转换为并口或者USB口与PC段相连。
图片 1
 JTAG最初是用来对芯片进行测试的,JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。如今,JTAG接口还常用于实现ISP(In-System Programmer,在系统编程),对FLASH等器件进行编程。在2440中,当需要对NOR Flash进行烧写时,就需要用到JTAG接口进行烧录软件,而当软件是要烧录到NAND Flash时,使用串口与USB接口就可以操作。这里介绍NOR Flash、NAND Flah与SDRAAM的区别。
 ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。

芯片 特点
静态RAM(Static RAM/SRAM),是目前读写最快的存储设备,但是它也非常昂贵;
RAM 动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,但从价格上来说DRAM相比SRAM要便宜很多;
DDR RAM(Date-Rate RAM)也称作DDR SDRAM(Synchronous Dynamic RAM),可以在一个时钟读写两次数据,这样就使得数据传输速度加倍。

 目前Flash主要有两种NOR Flash和NADN Flash。NOR Flash的读取和SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NAND Flash上的代码,因此众多NAND Flash的开发板除了使用NAND Flah以外,还有一块小的NOR Flash来运行启动代码。
 在2440开发板中,通常将uboot烧写在nor flash上作为引导程序,而linux kernel与根文件系统烧录在nand flash上,而这些代码会加载到SDRAM中运行。

首先下载qemu for mini2440,直接打包下载 

git clone git://repo.or.cz/qemu/mini2440.git  qemu

1.1 安装交叉编译器 arm-linux-gcc

获取 arm-linux-gcc 软件包

软件包在友善之臂光盘A盘中,具体位置为:
A盘-2013-09/Linux/arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
或者点击这里下载。

解压到指定目录

$ tar -zxvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C ~/software/

配置相关环境变量,将交叉编译器的 bin 目录追加到 PATH 环境变量之后。打开家目录下的 ~/.bashrc 文件,在其后追加一行

export PATH=~/software/opt/FriendlyARM/toolschain/4.5.1/bin:$PATH

然后执行修改过的文件,是配置生效。

$ . .bashrc             # 执行 .bashrc 文件
$ arm-linux-gcc -v      # 输出版本信息,安装配置成功  

二、在TQ2440中开发板程序的烧录

 一个linux文件系统的构成可分为硬件、bootloader、内核、根文件系统四个层次。首先要想硬件可以工作工作,需要有bootloader引导程序,它设置硬件相关参数以及软件变量,如设置中断变量、关闭看门狗、初始化串口、时钟等硬件参数,设置堆栈等。要完成这些操作,那么UBOOT代码就必须上电就能自动运行,通常将这些代码烧录在NOR Flash中,因为NAND Flash无法运行代码,而linux kernel、 root filesystem则烧录到nand flash中等待bootloader引导完成加载到SDRAM中运行。
1. 使用J-link烧写u-boot到Nor Flash
 编译uboot具体操作步骤为:
1、解压u-boot1.1.6,进入解压后的目录
2、打补丁
3、使用arm-linux-gcc3.4.5编译器编译

book/home/test/1_bare_metal/1_test$ tar xjf u-boot-1.1.6.tar.bz2 
book/home/test/1_bare_metal/1_test$ cd u-boot-1.1.6/
book/home/test/1_bare_metal/1_test/u-boot-1.1.6$ patch -p1 < ../u-boot-1.1.6_jz2440.patch
book/home/test/1_bare_metal/1_test/u-boot-1.1.6$ arm-linux-gcc -v
Reading specs from /work/tools/gcc-3.4.5-glibc-2.3.6/lib/gcc/arm-linux/3.4.5/specs
Configured with: /work/tools/create_crosstools/crosstool-0.43/build/arm-linux/gcc-3.4.5-glibc-2.3.6/gcc-3.4.5/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6 --with-float=soft --with-headers=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/include --with-local-prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c   --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.5
book/home/test/1_bare_metal/1_test/u-boot-1.1.6$ make 100ask24x0_config
book/home/test/1_bare_metal/1_test/u-boot-1.1.6$ make 

烧写uboot:
1、JLink 的 USB 口接到电脑上,JTAG 口用排线和开发板的 JTAG 口相连, 开发板设为 Nor Flash 启动并上电。
2、启动 J-Flash, 它在“Windows 开始菜单->所有程序->SEGGER”里面。
3、选择菜单“File -> Open -> Open Project…”,打开光盘里的 s3c2440.jflash。
图片 2
4、选择菜单“Target -> Connect”
图片 3
5、选择菜单“File -> Open”,打开要烧写的二进制文件,比如 u-boot.bin,并且在“Start address”里输入 0。
6、选择菜单“Target -> Auto”即可自动烧写。
7、重启开发板,启动uboot。

##### 100ask Bootloader for OpenJTAG #####
[n] Download u-boot to Nand Flash
[o] Download u-boot to Nor Flash
[c] Re-scan Nor Flash
[u] Copy bootloader from nand to nor
[v] Copy bootloader from nor to nand
[k] Download Linux kernel uImage
[j] Download root_jffs2 image
[y] Download root_yaffs image
[d] Download to SDRAM & Run
[z] Download zImage into RAM
[g] Boot linux from RAM
[f] Format the Nand Flash
[s] Set the boot parameters
[b] Boot the system
[r] Reboot u-boot
[q] Quit from menu
Enter your selection:

2. 使用DNW和串口工具CRT烧写Linux内核和根文件系统
编译Linux内核的步骤为:
1、解压linux2.6.22,进入解压后的目录
2、打补丁
3、使用arm-linux-gcc3.4.5编译器编译

book/home/test/1_bare_metal/1_test$ tar xjf linux-2.6.22.6.tar.bz2 
book/home/test/1_bare_metal/1_test$ cd linux-2.6.22.6/
book/home/test/1_bare_metal/1_test/linux-2.6.22.6$ patch -p1 < ../linux-2.6.22.6_jz2440.patch

4、这里我是用的是TQ2440开发板,因此韦老师的linux内核源码不能直接使用在TQ2440开发板上,需要对LCD和DM9000两个驱动程序进行修改。
将TQ2440源码drivers_and_test17th_dm9000c修改好的dm9dev9000c.c复制到linux-2.6.22.6/drivers/net目录下;
修改其Makefile:obj-$(CONFIG_DM9000) = dm9dev9000c.o #dm9000.o
将TQ2440源码drivers_and_test10th_lcd4thlcd.c复制到linux-2.6.22.6/drivers/video目录下,并修改其Makefile:obj-$(CONFIG_FB_S3C2410) = lcd.o #s3c2410fb.o
5、修改config_ok为.config
book/home/test/1_bare_metal/1_test/linux-2.6.22.6$ cp config_ok .config
6、编译make uImage,此事可能出现错误:

book/home/test/1_bare_metal/1_test/linux-2.6.22.6$ make uImage
Makefile:1449: *** mixed implicit and normal rules: deprecated syntax
/home/test/1_bare_metal/1_test/linux-2.6.22.6/Makefile:416: *** mixed implicit and normal rules: deprecated syntax
/home/test/1_bare_metal/1_test/linux-2.6.22.6/Makefile:1449: *** mixed implicit and normal rules: deprecated syntax
make[1]: *** No rule to make target 'silentoldconfig'。 停止。
  CHK     include/linux/version.h
make: *** No rule to make target 'include/config/auto.conf', needed by 'include/asm-arm/.arch'。 停止。

根据提示修改这两行Makefile:
在makefile中将416行代码:config %config: scripts_basic outputmakefile FORCE
改为:%config: scripts_basic outputmakefile FORCE
在makefile中将1449行代码:/ %/: prepare scripts FORCE
改为:%/: prepare scripts FORCE
再次编译,编译成功。

    ...
UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-2.6.22.6
Created:      Fri Dec 29 20:05:44 2017
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    1845828 Bytes = 1802.57 kB = 1.76 MB
Load Address: 0x30008000
Entry Point:  0x30008000
  Image arch/arm/boot/uImage is ready
book/home/test/1_bare_metal/1_test/linux-2.6.22.6$ 

7、在串口界面输入k命令下载uImage,使用dnw下载数据。

##### 100ask Bootloader for OpenJTAG #####
[n] Download u-boot to Nand Flash
[o] Download u-boot to Nor Flash
[c] Re-scan Nor Flash
[u] Copy bootloader from nand to nor
[v] Copy bootloader from nor to nand
[k] Download Linux kernel uImage
[j] Download root_jffs2 image
[y] Download root_yaffs image
[d] Download to SDRAM & Run
[z] Download zImage into RAM
[g] Boot linux from RAM
[f] Format the Nand Flash
[s] Set the boot parameters
[b] Boot the system
[r] Reboot u-boot
[q] Quit from menu
Enter your selection: k
USB host is connected. Waiting a download.

8、在串口界面输入y命令下载根文件系统,使用dnw下载数据。

##### 100ask Bootloader for OpenJTAG #####
[n] Download u-boot to Nand Flash
[o] Download u-boot to Nor Flash
[c] Re-scan Nor Flash
[u] Copy bootloader from nand to nor
[v] Copy bootloader from nor to nand
[k] Download Linux kernel uImage
[j] Download root_jffs2 image
[y] Download root_yaffs image
[d] Download to SDRAM & Run
[z] Download zImage into RAM
[g] Boot linux from RAM
[f] Format the Nand Flash
[s] Set the boot parameters
[b] Boot the system
[r] Reboot u-boot
[q] Quit from menu
Enter your selection: y
USB host is connected. Waiting a download.

Now, Downloading [ADDRESS:30000000h,TOTAL:49769290]
RECEIVED FILE SIZE:49769290 (725KB/S, 67S)

NAND erase: device 0 offset 0x260000, size 0xfda0000
Erasing at 0xffa0000 --   3% complete.
OK

NAND write: device 0 offset 0x260000, size 0x2f76b40

Writing data at 0x3033800 --  13% complete.
 49769280 bytes written: OK

9、启动开发板,查看效果。

Warning: firstuse finished 1
tsdev (compaq touchscreen emulation) is scheduled for removal.
See Documentation/feature-removal-schedule.txt for details.
Warning: TimeZone::data Can't create a valid data object for 'Europe/Oslo'
Warning: Unable to open /root/Settings/Categories.xml
Warning: could not register server

starting pid 772, tty '/dev/s3c2410_serial0': '/bin/sh'
# 
# ls
bin         lib         mnt         root        tmp
dev         linuxrc     opt         sbin        usr
etc         lost found  proc        sys
# 

图片 4
3. 使用tftp网络烧写Linux内核和根文件系统
 当开发板中安装好uboot后,还可以使用网络tftf下载linux内核与根文件系统,此时当tftp服务器为win7时,要保证开发板与PC机之间可以ping通。这里我采用开发板与PC机直接使用网线相连,PC机有线IP为192.168.2.20;开发板IP为192.168.2.10。

OpenJTAG> set ipaddr 192.168.2.10
OpenJTAG> set serverip 192.168.2.20
OpenJTAG> save
Saving Environment to NAND...
Erasing Nand...Writing to Nand... done
OpenJTAG> printenv
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200
bootcmd=nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0
bootdelay=2
baudrate=115200
ethaddr=08:00:3e:26:0a:5b
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial
mtdids=nand0=nandflash0
mtdparts=mtdparts=nandflash0:256k@0(bootloader),128k(params),2m(kernel),-(root)
partition=nand0,0
mtddevnum=0
mtddevname=bootloader
ipaddr=192.168.2.10
serverip=192.168.2.20

Environment size: 450/131068 bytes

图片 5
1、PC机tftp端设置,将需要下载的内核与根文件系统放在服务器目录下。
图片 6
2、开发板进入uboot命令行界面下载kernel:
tftp 30000000 uImage
mtdpart 查看分区信息
nand erase kernel
nand write.jffs2 30000000 kernel
3、下载根文件系统
tftp 30000000 fs_qtopia.yaffs2
nand erase root
nand write.yaffs 30000000 260000(root分区地址) 2fb6b40(大小)
4、开发板启动效果:
图片 7
4. 使用NFS服务器挂载内核和根文件系统
 使用NFS下载方法与tftp下载方式,大致相同,此时要确保开发板可以和虚拟机ubuntu能ping通。同时要设置虚拟机已经开启了nfs服务,并设置了挂载点:

book~$  cat /etc/exports 
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
/work/nfs_root  *(rw,sync,no_root_squash)      #挂载目录

1、下载内核
nfs 30000000 192.168.1.123:/work/nfs_root/uImage
nand erase kernel
nand write.jffs2 30000000 kernel
2、下载根文件系统
nfs 30000000 192.168.1.123:/work/nfs_root/fs_qtopia.yaffs2
nand erase root
nand write.yaffs 30000000 26000 2f76b40

 

如果感觉速度慢,直接打包下载

1.2 安装串口终端 kermit

$ sudo apt-get install ckermit

编写配置文件

在用户家目录下创建一个 kermit 的配置文件:~/.kermrc,其内容为:

set line /dev/ttyS0      # 如果是 USB 转串口连接的开发板,修改为 ttyUSB0
set speed 115200
set carrier-watch off
set handshake none
set flow-control none
robust
set file type bin
set file name lit
set rec  pack 1000
set send pack 1000
set window 5

直接进入终端

$ sudo kermit -c

这里 -c 表示 connect ,不加 -c 选项则进入命令模式,命令模式输入 c 也可以进入终端。
终端模式下,先同时按住 Ctrl ,再按 c 可以返回命令模式。

解压后,进入源代码目录中:

1.2 烧写 uboot

获取 uboot 源码包

源码包在友善之臂光盘A盘中,具体位置为:
A盘-2013-09/uboot/uboot_tiny4412-20130729.tgz
或者点击这里下载。

解压 uboot 到指定目录

进入到 uboot 源码所在目录,执行解压命令。

$ tar -zxvf uboot_tiny4412-20130729.tgz -C ~/workspace/exynos4412/source/

这里通过 -C 参数指定解压到 ~/workspace/exynos4412/source/ 目录下,解压后 ~/workspace/exynos4412/source/ 目录下出现 uboot_tiny4412 目录

sudo apt-get install zlib1g-dev
sudo apt-get install libsdl-dev

解压后,今日源代码的主目录中,

1.3 配置 uboot

$ make clean                 # 清除编译生成的文件
$ make distclean             # 清除配置
$ make tiny4412_config       # 配置 uboot

(prefix指定安装路径,这里是$HOME/work/mini2440)

  1. # ./configure --target-list=arm-softmmu # make -j4  

    # ./configure --target-list=arm-softmmu # make -j4

  2. 下载u-boot for mini2440

1.4 编译 uboot

$ make -j16                  # -j16 参数表示16线程编译, 可以加快编译速度
./configure --target-list=arm-softmmu --prefix=$HOME/work/mini2440
make -j4
make install 

git clone  git://repo.or.cz/w/u-boot-openmoko/mini2440.git  uboot

1.5 烧写 uboot 到 SD 卡

友善之臂给我们提供了烧写 uboot 的脚本程序:uboot_tiny4412/sd_fuse/tiny4412/sd_fusing.sh
执行该脚本可以将 uboot 烧写进 SD 卡中

$ sudo ./sd_fusing.sh /dev/sdb

 安装完后,添加环境变量:

或者打包下载

1.3 烧写 kernel

sudo vim /etc/bash.bashrc

1.获取内核源码包

源码包在友善之臂光盘A盘中,具体位置为:
A盘-2013-09/Linux/linux-3.5-20150929.tgz

 添加一行:

(注意 采用打包下载的时候这几个包的文件名可能相同,注意区分)解压后,配置Makefile文件,打开Makefile文件,CROSS_COMPILE变量赋值,即自己所使用的交叉编译工具链,比如我的是arm-none-linux-gnueabi-,保存退出,输入

2.解压内核到指定目录下

进入到内核源码所在目录,执行解压命令。

$ tar -zxvf linux-3.5-20150929.tgz -C ~/workspace/exynos4412/source/

这里通过 -C 参数指定解压到 ~/workspace/exynos4412/source/ 目录下,解压后 ~/workspace/exynos4412/source/ 目录下出现 linux-3.5 目录

export PATH=$PATH:$HOME/work/mini2440/bin 
  1. # make mini2440_config # make -j4  

    # make mini2440_config # make -j4

3.配置 Linux 内核

进入到刚刚解压出来的 linux-3.5 目录下,依次执行下列步骤:

$ make clean                          # 清除编译生成的文件
$ make distclean                      # 清除配置
$ cp tiny4412_linux_defconfig .config # 拷贝官方的配置文件配置Linux内核
$ make menuconfig                     # 进入内核图形化配置界面

图片 8

这里写图片描述

移动光标到 System Type ---> [*] Support TrustZone-enabled Trusted Execution Environment 这里

图片 9

这里写图片描述

通过空格键,取消其选中状态,不选中它,最后保存退出。

保存退出后,用source 生效或者注销重新登录

稍等两分钟,即在当前目录下生成名为 u-boot.bin 的文件,注意如果想在之后使用u-boot 的nfs下载文件功能,需要修改代码中的一部分,将net/nfs.c文件中的

4.编译内核

$ make -j16

编译成功后会生成 linux 内核映像文件,映像文件位于: linux-3.5/arch/arm/boot/zImage

如果没有生成 zImage 文件,接着 make 一次,不要加 -j16 参数,查看其错误信息。

图片 10

这里写图片描述

错误提示信息已经写的很清楚了:Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373. 提示我们说这里应该省略 defined() 。

打开 linux-3.5/kernel/timeconst.pl 文件。

/* 372 */   @val = @{$canned_values{$hz}};
/* 373 */   if (!defined(@val)) {
/* 374 */       @val = compute_values($hz);
/* 375 */   }
/* 376 */   output($hz, @val);

我们应该修改第373行,将改为 if (!defined(@val)) 改为 if(!@val) 就可以了。

source /etc/bash.bashrc

NFS_TIMEOUT = 2UL 修改为 NFS_TIMEOUT = 20000UL 否则会造成nfs文件下载失败,如果不使用nfs下载功能,不改也可。

5.烧写内核到 SD 卡

进入到 zImage 所在目录,执行烧写命令。

$ sudo dd iflag=dsync oflag=dsync if=zImage of=/dev/sdb seek=1057

dd命令:向存储器设备写入数据。

  • 参数:
    dd iflag=dsync oflag=dsync if=<将要烧写的文件> of=<烧写的目标设备> seek=<跳过块数量>
  • 块的单位:512字节
  • dsync:表示带缓冲

这里跳过 1057 个块是因为友善之臂的 uboot 默认从 SD 卡的 1057 个块加载内核。

测试是否正常:

  1. 下载 linux kernel for mini2440

uboot 环境变量和根文件系统制作

qemu-system-arm --version

(下载步骤略去)

一 相关软件

 

进入源码目录

1.nfs-kernel-server 服务器

2 使用buildroot一键生成uboot和linux内核及根文件系统

  1. # make mini2440_defconfig ARCH=arm #make -j4 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage  

    # make mini2440_defconfig ARCH=arm #make -j4 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

NFS 介绍

NFS 即网络文件系统(Network File-System),可以通过网络让不同机器、不同系统之间可以实现文件共享。通过 NFS,可以访问远程共享目录,就像访问本地磁盘一样。
在 ubuntu 主机上安装 nfs 服务器,开发板便可以通过网络访问 ubuntu 主机上的共享的文件。

首先下载buildroot的源代码,下载地址: 

之后会在arch/arm/boot/目录下生成uImage 文件,将此文件复制到qemu目录下的mini2440文件夹下,并将mini2440文件夹中的mini2440_start.sh作如下修改

安装 NFS 服务器

$ sudo apt-get install nfs-kernel-server       # 安装 NFS 服务器端
$ sudo apt-get install nfs-common              # 安装 NFS 客户端

 

将 kernel 一行改为-kernel "$base/uImage" ,回到上层目录后运行

设置共享目录

安装完 NFS 服务器等相关软件后,需要指定用于共享的 NFS 目录,其方法是在 /etc/exports 文件里面设置对应的目录及相应的访问权限,每一行对应一个设置。下面介绍如何添加 NFS 共享目录。

$ sudo vi /etc/exports

/etc/exports 文件打开后,文件内容为

# /etc/exports: the access control list for filesystems which may be exported
#       to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/home/user/workspace/exynos4412/rootfs *(rw,sync,no_root_squash)

在最后一行追加:

/home/user/workspace/exynos4412/rootfs *(rw,sync,no_root_squash)                              # 其中“*”表示允许任何网段 IP 的系统访问该 NFS 目录

解压后,进入源代码目录中:

  1. # sh mini2440/mini2440_start.sh  

    # sh mini2440/mini2440_start.sh

创建并配置共享文件夹

修改完成后,保存并退出 /etc/exports 文件。然后新建 /home/user/workspace/exynos4412/rootfs 目录,并为该目录
设置最宽松的权限:

$ sudo mkdir -p /home/user/workspace/exynos4412/rootfs
$ sudo chmod -R 777 /home/user/workspace/exynos4412/rootfs
$ sudo chown –R nobody /home/user/workspace/exynos4412/rootfs
sudo apt-get install libncurses5-dev
patch configure <../configure.patch    /* 需要修改源码 打补丁 */
make mini2440_defconfig
make menuconfig

这时应该看到qemu启动后进入了u-boot界面下,输入命令

启动 NFS 服务

在终端中执行如下命令,可以启动 NFS 服务:

$ sudo /etc/init.d/nfs-kernel-server start

执行如下命令则可以重新启动 NFS 服务:

$ sudo /etc/init.d/nfs-kernel-server restart

安装库:

  1. # bootm  

    # bootm

测试 NFS 服务器

NFS 服务启动后,可以在 ubuntu 主机上进行自测。测试的基本方法为:将已经设定好NFS 共享目录 mount(挂载)到另外一个目录下,看能否成功。
假定 Linux 主机 IP 为 192.168.12.123,NFS 共享目录为 /home/user/workspace/exynos4412/rootfs 可使用如下命令进行测试:

$ sudo mount -t nfs 192.168.12.123:/home/user/workspace/exynos4412/rootfs /mnt -o nolock

如果指令运行没有出错,则 NFS 挂载成功,在 /mnt 目录下应该可以看到 /home/user/workspace/exynos4412/rootfs 目录下的内容。

sudo apt-get install g  
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install gettext
sudo apt-get install patch
sudo apt-get install git-core
sudo apt-get install xz-utils
sudo apt-get install automake

就会看到linux内核启动的画面,但此时还没有根文件系统,我们稍候介绍采用nfs挂在根文件系统

2.busybox 工具

安装texinfo 4.13

4. 假设你用的操作系统为Ubuntu,首先安装 nfs服务器

busybox 介绍

BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令。
正是因为我们的开发板要需要有对应 ARM 架构的控制台,也要有控制台的命令(根文件系统必备文件夹:/bin , /etc, /lib/ , /dev),因此我们需要 busybox 制作开发板的上命令的执行程序。

tar -zxvf texinfo-4.13a.tar.gz
cd texinfo-4.13
./configure
make
sudo make install
  1. # sudo apt-get install nfs-kernel-server  

    # sudo apt-get install nfs-kernel-server

获取 busybox 源码包

可以直接去官网下载,也可以点击这里下载。

修改bug(注释下面文件中:_GL_WARN_ON_USE (gets,.......  这行代码):

之后修改/etc/exports文件,添加如下一行

解压源码包到指定文件夹

$ tar -jxvf busybox-1.23.2.tar.bz2 -C ~/workspace/exynos4412/source/
vim output/build/host-m4-1.4.16/lib/stdio.in.h
vim output/build/host-m4-1.4.16/lib/stdio.h

/home/username/nfs *(rw,sync,no_root_squash)

配置 busybox

进入到解压目录 ~/workspace/exynos4412/source/busybox-1.23.2

进入图形配置菜单

$ make menuconfig     # 进入图形配置菜单

图片 11

这里写图片描述

配置BUSYBOX的编译器

Busybox Settings ---> Build Options ---> (arm-linux-) Cross Compiler prefix // 按下回车键即可进入到编辑框

图片 12

这里写图片描述

配置busybox编译安装的目录

Busybox Settings ---> Installation Options ("make install" behavior) ---> (/home/user/workspace/exynos4412/rootfs) BusyBox installation prefix

图片 13

这里写图片描述

在安装 时间比较长(可以先用我提供的安装文件放到buildroot-2012.05/dl目录下,这样省去下载时间)

....................注意  /home/username/nfs 为你所要共享的目录

编译安装 busybox

回到busybox顶层目录下

$ make                                         # 编译
$ make install                                 # 安装

安装成功后在 /home/user/workspace/exynos4412/rootfs 目录下会生成/bin/ 、/sbin目录等文件夹。

链接: 密码:2dkz

输入命令

二 制作根文件系统

注意:/home/user/workspace/exynos4412/rootfs 目录以后就是开发板的根目录。
注意:以下的所有步骤除非特殊说明,都是在rootfs目录下操作。

3 Flashimg制作nand.bin并启动系统

  1. # sudo /etc/init.d/nfs-kernel-server restart  

    # sudo /etc/init.d/nfs-kernel-server restart

1. 完善Linux系统根目录下的目录

#mkdir -p lib dev etc/init.d home proc sys root opt tmp var

下载flashimg源码 

启动 nfs服务

2. 拷贝共享库到rootfs/lib目录下

说明:库在交叉编译器的安装目录下。

$ cp ~/software/arm-linux-gcc/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/* ./lib/ -rfdv

 

测试 nfs服务是否成功启动

3. 拷贝分组和密码文件到rootfs/etc目录下

$ cp /etc/group etc/
$ cp /etc/passwd etc/

解压后,进入flashimg源码目录后

  1. # sudo mkdir /mnt/nfs # sudo mount -t nfs localhost:/home/username/nfs /mnt/nfs  

    # sudo mkdir /mnt/nfs # sudo mount -t nfs localhost:/home/username/nfs /mnt/nfs

4. 创建fstab文件

$ cp /etc/fstab etc/
./autogen.sh (要求autoconf版本大于2.67)
./configure 
make 
sudo make install 

查看/mnt/nfs文件是否于/home/username/nfs 中相同,若一样 ,OK

5. 创建inittab文件

$ cp  /work/busybox/busybox-1.23.2/examples/inittab etc/

修改inittab文件:

::sysinit:/etc/init.d/rcS                              # 定义系统上电执行的初始化文件。
console::respawn:-/bin/sh                              # 指定控制台的脚本解释器和进入控制台的模式
::ctrlaltdel:/sbin/reboot                              # 指定系统重启命令
::shutdown:/bin/umount -a -r                           # 指定系统关机前执行的命令

 然后把我们生成的三个文件 : u-boot.bin, uImage和rootfs.jffs2 拷贝到 flashimg文件夹下运行 

  1. 将mini2440目录下的mini2440_start.sh修改为

  2. #!/bin/sh sudo ../arm-softmmu/qemu-system-arm    -M mini2440    -kernel mini2440/uImage -serial stdio    -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=./qemu-ifup,downscript=./qemu-ifdown    -show-cursor    -usb -usbdevice keyboard -usbdevice mouse  

    #!/bin/sh sudo ../arm-softmmu/qemu-system-arm   -M mini2440   -kernel mini2440/uImage -serial stdio   -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=./qemu-ifup,downscript=./qemu-ifdown   -show-cursor   -usb -usbdevice keyboard -usbdevice mouse

6. 创建etc/init.d/rcS文件

#vim etc/init.d/rcS

#!/bin/sh
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s                                                # 根据安装的驱动自动在dev目录下创建设备节点
/bin/hostname exynos

注意:rcS文件是一个脚本文件,必须有可执行权限。修改rcS文件的权限:

$ chmod 777 rcS
./flashimg -s 64M -t nand -f nand.bin -p uboot.part -w boot,u-boot.bin -w kernel,uImage -w root,rootfs.jffs2 -z 512 

在建立两个脚本,分别为qemu-ifup, qemu-ifdown

7.创建etc/profile文件

$ vim etc/profile

写入以下代码:

USER="id-un"
LOGNAME=$USER
PS1='[u@h w]# '                                     # 保存的是当前命令行终端提示符显示的格式
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH

即可生成nand.bin。启动方法为:

qemu-ifup 脚本

三 设置 uboot 环境变量 启动内核

qemu-system-arm -M mini2440 -serial stdio -mtdblock nand.bin -usbdevice mouse 
  1. #!/bin/sh echo "Excuting qemu-ifup" ifconfig $1 10.0.0.1  

    #!/bin/sh echo "Excuting qemu-ifup" ifconfig $1 10.0.0.1

1.uboot 常用环境变量介绍

  • baudrate: 保存波特率
  • bootargs: 保存内核的启动参数。
  • bootcmd: 保存UBOOT的启动命令(保存了UBOOT上电后自动执行的命令----就是3-2-1后执行的代码)
  • bootdelay:保存UBOOT上电延时的秒数。
  • ethaddr :保存网卡MAC地址
  • gatewayip:保存网关地址
  • ipaddr :保存当前开发板的IP地址(UBOOT代码有效)。
  • netmask :保存子网掩码
  • serverip :保存服务器的地址

(若出现错误:浮点数例外启动不了qemu,请全屏最大化终端,再次执行,这是由于分辨率问题造成)

qemu-ifdown脚本

2.UBOOT 环境变量操作命令

  • 打印环境变量信息, 命令:printenv
    功能:将整个UBOOT的环境变量打印出来显示。

  • 保存环境变量, 命令:saveenv
    功能:将环境变量保存到SD卡或者EMMC指定块位置。(设置时存放在DDR某个位置)

  • 设置环境变量, 命令:setenv
    功能:用于设置环境变量,也可以创建新的环境变量。命令格式为:

    TINY4412 # setenv <环境变量名称> <环境变量的值…如果有很多值使用空格隔开>

输入下面指令加载内核和根文件系统:

  1. #!/bin/sh echo "Close tap!" sudo ifconfig $1 10.0.0.1 down  

    #!/bin/sh echo "Close tap!" sudo ifconfig $1 10.0.0.1 down

  2. 当这些都配置好后,我们即可使用nfs根文件系统了

3.设置环境变量,使uboot正确引导内核启动

为了引导内核启动需要设置 bootargs 环境变量。
在 uboot 下执行命令:

TINY4412 # setenv bootargs 'root=/dev/nfs nfsroot=192.168.1.110:/home/user/workspace/exynos4412/rootfs ip=192.168.1.111:192.168.1.110:192.168.1.255:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 lcd=s70'
  • root参数:决定了使用什么方式读取文件系统。
  1. /dev/nfs :表示从网络NFS方式加载文件系统
  2. /dev/ mmcblk0p2 :表示从设备编号为0的设备的第2个的分区进行加载文件系统。
  • nfsroot参数:nfsroot参数只有在启动方式设置NFS方式加载时才有效果。
    nfsroot语法格式:

      <服务器IP地址>:<服务器上的文件目录>  ip=<开发板IP地址>:<服务器IP地址>:<网关>:<子网掩码>::eth0:off
    
  • rootfstype参数:rootfstype参数只有设置位本地加载文件系统才有作用。
    rootfstype用于设置加载文件系统的分区是什么文件系统格式。
    这里的格式只能是Linux下的文件系统格式:比如:ext2、ext3、ext4

  • init参数:保存了操作系统上电后执行的第一个脚本代码。

  • console参数:控制台。决定了使用哪个串口当做当前Linux系统的控制台。

      console=ttySAC0,115200      # 表示使用串口0作为控制台,波特率是115200。
    
nboot kernel 
setenv bootargs root=/dev/mtdblock3 rootfstype=jffs2 console=ttySAC0,115200 
saveenv 
bootm 

这里我们的根文件系统为 /home/username/nfs

 启动后,输入默认密码root,即可成功登录,此时还没有配置网络。ifconfig发现没有网卡。

在qemu的目录中输入

 4 NFS挂在根文件系统

  1. # ./mini2440/mini2440_start.sh  

    # ./mini2440/mini2440_start.sh

 首先安装nfs服务

u-boot启动成功后输入设置linux kernel的引导参数

sudo apt-get install nfs-kernel-server 

set bootargs noinitrd root=/dev/nfs rw nfsroot=10.0.0.1:/home/lizhao/ARM-pro/nfs/rootfs ip=10.0.0.10:10.0.0.1::255.255.255.0 console=ttySAC0,115200

新建nfsroot文件夹

再输入命令

mkdir ~work/nfsroot 

bootm

然后配置nfs目录 

OK ! kernel就开始加载了,文件系统挂在成功后,就可以进行各种仿真工作了,下面是我挂载的由友善之臂提供的mini2440的qtopia文件系统的截图:

sudo vi /etc/exports 

图片 14

添加一行

图片 15

/home/zwx/work/nfsroot *(rw,sync,no_root_squash,no_subtree_check

友善之臂提供的qtopia文件系统在挂载时会初始化网卡,但我们是由nfs挂载的文件系统,这会导致nfs连接中断,挂载失败,所以用nfs挂载之前需要把网卡的初始化过程取消,对应的文件是/etc/init.d/if-config,只需把该文件内容清空即可。Enjoy yourself!

然后执行:

目前,我打算让GPE环境在这仿真环境中跑起来,目前还没有成功,正在尝试中。

sudo /etc/init.d/nfs-kernel-server restart

图片 16

进入NFS共享目录:

cd /home/zwx/work/nfsroot/ 

 修改权限

sudo chmod -R 777 ./ 

解压根文件系统

tar xvzf rootfs_qtopia_qt4-20140103.tar.gz

注意:友善之臂提供的qtopia文件系统在挂载时会初始化网卡,但我们是由nfs挂载的文件系统,这会导致nfs连接中断,挂载失败,所以用nfs挂载之前需要把网卡的初始化过程取消,对应的文件是/etc/init.d/if-config,只需把该文件内容删除即可(删除文件也可以)。

sudo chmod -R 777 ./ 
cd rootfs_qtopia_qt4
cd etc/init.d/
rm ifconfig-eth0

创建虚拟网卡并配置ip

sudo apt-get install uml-utilities //运行tunctl必须的工具
sudo tunctl -u $USER -t tap0
sudo ifconfig tap0 192.168.42.1

带网络方式启动qemu

cd /home/zwx/work/qemu/flashimgflashimg-fb97139
qemu-system-arm -M mini2440 -serial stdio -mtdblock nand.bin -usbdevice mouse -kernel uImage -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=no,downscript=no

启动后进入uboot模式,此时的qemu还不能显示,输入下面指令加载内核和根文件系统。

set bootargs noinitrd root=/dev/nfs rw nfsroot=192.168.42.1:/home/zwx/work/nfsroot/rootfs_qtopia_qt4/,proto=tcp,nfsvers=3,nolock  ip=192.168.42.2:192.168.42.1::255.255.255.0 console=ttySAC0,115200
bootm

然后就可以启动了

 5 安装交叉编译工具链:

arm-linux-gcc-4.4.3.tar.gz 

安装库:

sudo apt-get install lib32stdc  6
sudo apt-get install lib32z1

 

 好了 到此就可以愉快的进行开发了。

 

编辑:操作系统 本文来源:软件包在友善之臂光盘A盘中,就需要用到JTAG接口

关键词: 澳门新濠3559