原創作品:http://write.blog.csdn.net/postedit/7956383
歡迎大家一起交流學習,知識在與分享。
希望結交一些志同道和之士
QQ: 474530676
linux 開發環境的搭建 2
平臺:虛擬機 和 ubuntu12.04 和 up6410開發板
虛擬機 pc機 開發板 要在同一個網段
先在pc機下裝好串口驅動
老師資料存放在根目錄下 /home/up6410 文件夾下
虛擬機下操作:
// 安裝編譯器:
1. [root@longguopeng:/#] mkdir /usr/local/arm
[root@longguopeng:/#] tar -jvxf /home/up6410/src/arm-linux-gcc-4.3.2.tar.bz2 -C /usr/local/arm
//現在交叉編譯程序集都在/usr/local/arm/3.4.1/bin下面了
2,解壓完成後將目錄加到環境變量裏
[root@longguopeng:/#] vim /etc/profile
在最後加一行:
export PATH="$PATH:/usr/local/arm/4.3.2/bin"
或
[root@longguopeng:/#] vim /etc/bash.bashrc
在最後加上:
export PATH=$PATH:/usr/local/arm/3.4.1/bin
export PATH
3,立即使新的環境變量生效,不用重啓電腦
[root@longguopeng:/#] source /root/.bashrc //生效
[root@longguopeng:/#] source /etc/profile
4. 檢查是否將路徑加入到PATH:
root@longguopeng:~# echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.3.2/bin
[root@longguopeng:/#]# arm-linux-gcc -v // 測試是否安裝成功
...........................
...........................
gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)
5,重新啓動後--完成就可以直接輸入arm-linux-gcc 命令編譯了
編譯目錄就是在/home/nfsroot下
*****************************************************************************************
// 編譯定製 u-boot:
第一步:
[root@longguopeng:/#] tar -vxf /home/up6410/src/u-boot-1.1.6.tar.bz2
[root@longguopeng:/#] cd /home/up6410/src/u-boot-1.1.6
第二步:
進到u-boot-1.1.6 定製u-boot 文件
1,刪除不需要的文件
留下:
arm-config.mk
config.mk
Makefile
MAKEALL
mkconfig
mknand //沒有
mkmovi //沒有
write-sd //沒有
tags //沒有
README
rules.mk
System.map
u-boot
u-boot.map
u-boot.bin
u-boot.dis
u-boot.sre.c
board
common
cpu
disk
drivers
dtt
examples
fs
include
lib-arm
lib-generic
nand-spl
net
post
rtc
tools
2,進到留下的boarde文件夾,留下samsung(三星),其他的全部刪除
進到samsung,留下smdk6410,其他的全部刪除
3,刪除完畢,改u-boot-1.1.6_smdk6410 下的Makefile
將193行改爲
ARCH := arm
CROSS_COMPILE := arm-linux-
(記得最後面不要加空格!)
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] gedit include/configs/up6410_sd.h
增加run 命令
171: CFG_CMD_RUN| \ 調到 165: CFG_CMD_RUN| \
可以修改環境變量:
---------------------------------------------------------------------------------------------
182: #define CONFIG_BOOTARGS"root=/dev/nfs rw nfsroot=2.2.2.168:/home/up6410/nfsroot ip=2.2.2.234:2.2.2.233:2.2.2.1:255.255.255.0:www.longguopeng.com:eth0:off console=ttySAC0,115200 mem=128M"
183: #define CONFIG_ETHADDR 11:22:33:44:55:66
#define CONFIG_NETMASK 255.255.255.0
#define CONFIG_IPADDR 2.2.2.167//開發板
#define CONFIG_SERVERIP2.2.2.168 //pc機
#define CONFIG_GATEWAYIP2.2.2.1 //網關
203行:PTF-PROMPT "ubuntu@longguopeng #" 改工作環境的顯示的名稱
---------------------------------------------------------------------------------------------
SD啓動
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] make up6410_sd_config
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] make
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] cp u-boot.bin /home/up6410/tftpboot/
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] cd /home/up6410/tftpboot/
[root@longguopeng:/home/up6410/tftpboot/#] cp u-boot.bin u-boot-sd.bin
或
NVND啓動
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] make up6410_nand_config
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] make
[root@longguopeng:/home/up6410/src/u-boot-1.1.6#] cp u-boot.bin /home/up6410/tftpboot/
[root@longguopeng:/#] cd /home/up6410/tftpboot/
[root@longguopeng:/home/up6410/tftpboot#] cp u-boot.bin u-boot-nand.bin cd
寫u-boot到nand flash:
uboot下操作:
nand erase 0 0x40000
tftp 0x50000000 u-boot-nand.bin
nand write 0x50000000 0 0x40000
*******************************************************************************************
// 編譯燒寫內核(zImage):
第一步:
解壓內核壓縮包:
[root@longguopeng:/#] tar jvxf /home/up6410/src/linux-2.6.28.tar.bz2
第二步:
進到linux-2.6.28
[root@longguopeng:/#] cd linux-2.6.28
第三步:
1:告訴Makefile 哪些要編譯
1) 在這個目錄下執行 make config ,
這樣的話會有很多項要選擇,所以可以直接
make defconfig 編譯默認選項
2) 在這個目錄下執行 make menuconfig
進到內核定製對話框,最終保存之後會生成一個.config(這個文件是隱藏的)
3)因爲在當前目錄下已經有一個up6410_config
文件,所以可以暫時不去定製內核,直接將這個文件命名爲.config文件就可以了
[root@longguopeng:/home/up6410/src/linux-2.6.28#] cp up6410_config .config
[root@longguopeng:/home/up6410/src/linux-2.6.28#] make zImage 或 make j2 2表示雙核
[root@longguopeng:/home/up6410/src/linux-2.6.28#] cp arch/arm/boot/zImage /home/up6410/tftpboot //將內核移到tftpboot
// 第四步:燒寫boot到sd卡和nandfalsh上 通過nfs掛載文件系統
//sd卡
1)root@longguopeng:/home/up6410# cd /home/up6410/tools/
2) 插上一張sd卡
3) root@longguopeng:/home/up6410# fdisk -l //查看sd卡在dev下面枚舉的文件(可以查看容量來確定)我的sd卡的枚舉的文件是/dev/sdb
4)root@longguopeng:/home/up6410/tools/# ./sd_write/dev/sdb /home/up6410/images/u-boot-movi.bin //下載
5) root@longguopeng:/home/up6410# umount /dev/sdb // 解掛
6)把sd卡插在開發板上面選擇sd卡啓動
7)minicom開發板上電然後狂敲回車至到出現有#的字符串
8) [uboot-longguopeng #] pri
9)[uboot-longguopeng #] set bootargs "root=/dev/nfs nfsroot=192.168.1.168:/home/up6410/nfsroot ip=192.168.1.167 console=ttySAC0;115200"
10)[uboot-longguopeng #] save
11)配置好後環境變量爲
---------------------------------------------------------------------------------------------
bootdelay=3
baudrate=115200
ethaddr=00:40:5c:26:0a:5b
ipaddr=192.168.1.167
serverip=192.168.1.168澀痛
gatewayip=192.168.1.1
netmask=255.255.255.0
bootcmd=tftp 50008000 zImage;bootm 50008000
nfsboot=root=/dev/nfs nfsroot=192.168.1.168:/home/up6410/nfsroot ip=192.168.1.167 console=ttySAC0;115200
bootargs=root=/dev/nfs nfsroot=192.168.1.168:/home/up6410/nfsroot ip=192.168.1.167 console=ttySAC0;115200
stdin=serial
stdout=serial
stderr=serial
Environment size: 408/16380 bytes
----------------------------------------------------------------------------------------------
12)用tftp下載zImage到0x50008000 從0x50008000啓動 bootm 0x50008000
[uboot-longguopeng #] tftp 0x50008000 zImage
[uboot-longguopeng #] bootm
或
[uboot-longguopeng #] set bootcmd tftp 0x50008000 zImage \;bootm
/*====================================================================================================================================*/
0x00000000-0x00040000 : "Bootloader" ==> /dev/mtdblock0
0x00040000-0x00400000 : "Kernel" ==> /dev/mtdblock1
0x00400000-0x05400000 : "Rootfs" ==> /dev/mtdblock2
0x05400000-0x10000000 : "File System" ==> /dev/mtdblock3
//nandfalsh
1)寫u-boot到nand flash:
2) [uboot-longguopeng #] nand erase 0 0x40000
3) [uboot-longguopeng #] tftp 50000000 u-boot-nand.bin
4) [uboot-longguopeng #] nand write 0x50000000 0 0x40000
5)手動 內核到nand flash:
6) [uboot-longguopeng #] nand erase 0x40000 0x300000
6) [uboot-longguopeng #] tftp 50000000 zImage
7)自動啓動
[uboot-longguopeng #] set bootcmd nand read 0x50008000 0x40000 0x220000\; bootm 0x50008000
[uboot-longguopeng #] set bootargs "root=/dev/nfs nfsroot=192.168.1.168:/home/up6410/nfsroot ip=192.168.1.167 console=ttySAC0;115200"
[uboot-longguopeng #] save
或
8) [uboot-longguopeng #] nand write 0x50000000 0x40000 0x220000
9) [uboot-longguopeng #] nand read 0x50008000 0x40000 0x220000
10) [uboot-longguopeng #] bootm 0x50008000
[uboot-longguopeng #] save
****************************************************************************************************
// 製作根文件系統:
[root@longguopeng:/#] tar jvxf /home/up6410/src/busybox-1.19.4.tar.bz2 //不顯示進度條
[root@longguopeng:/#] cd busybox-1.19.4
[root@longguopeng:/home/up6410/src/busybox-1.19.4#] vim Makefile
--------------------------------------
:164 //直接跳轉到164行
164:CROSS_COMPILE ?= arm-linux-
190:ARCH ?= arm
---------------------------------------
[root@longguopeng:/home/up6410/src/busybox-1.19.4#] make defconfig //默認 配置 //或者 make menuconfig(顯示配置菜單)
[root@longguopeng:/home/up6410/src/busybox-1.19.4#] make busybox
[root@longguopeng:/home/up6410/src/busybox-1.19.4#] mkdir /home/up6410/nfsroot
[root@longguopeng:/home/up6410/src/busybox-1.19.4#] chmod 777 /home/up6410/nfsroot //修改權限
[root@longguopeng:/home/up6410/src/busybox-1.19.4#] make install CONFIG_PREFIX=/home/up6410/nfsroot //安裝到相應的目錄
//也可以
[root@longguopeng:/home/up6410/src/busybox-1.19.4#] cp -rf _install // /home/nfsroot/
[root@longguopeng:/home/up6410/src/busybox-1.19.4#] cd /home/up6410/nfsroot
[root@longguopeng:/home/up6410/nfsroot#] mkdir dev etc lib proc sys tmp mnt
[root@longguopeng:/home/up6410/nfsroot#] mkdir -p lib/modules/2.6.28.6 #for rmmod //模塊命令
[root@longguopeng:/home/up6410/nfsroot#] ll dev/console //查看
[root@longguopeng:/home/up6410/nfsroot#] mknod dev/console c 5 1 //先創建串口
cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib // lib///拷貝所有的
//只需這三個 ld-linux.so.3 libc.so.6 libm.so.6
[root@longguopeng:/home/up6410/nfsroot#] cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/ld-linux.so.3 lib/
[root@longguopeng:/home/up6410/nfsroot#] cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/libc.so.6 lib/
[root@longguopeng:/home/up6410/nfsroot#] cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/libm.so.6 lib/
[root@longguopeng:/home/up6410/nfsroot#] vim etc/fstab
------------------------------------
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
------------------------------------
[root@longguopeng:/home/up6410/nfsroot#] mkdir etc/init.d
[root@longguopeng:/home/up6410/nfsroot#] vim etc/init.d/rcS
----------------------------------
#!/bin/sh
mount -a
echo "XXXXXXXXXXXXXXX"
echo "XXXXXXXXXXXXXXX"
echo "XXXXX long XXXX"
echo "XXXXX guo XXXXX"
echo "XXXXX peng XXXX"
echo "XXXXXXXXXXXXXXX"
echo "XXXXXXXXXXXXXXX"
echo "/sbin/mdev" > /proc/sys/kernel/hotplug
mdev -s
----------------------------------
[root@longguopeng:/home/up6410/nfsroot#] chmod +x etc/init.d/rcS
[root@longguopeng:/home/up6410/nfsroot#]tar cf ../mini_rootfs.tar *
/*===========================================================================================*/
// 寫根文件系統到nand flash, 脫離nfs掛載。
PC機操作:
1.拷貝文件系統:
[root@longguopeng:/#] cp-rf /home/up6410/src/qt_rootfs.tar /home/up6410/nfsroot
u-boot操作:
2.清除硬盤 4M 252M
[uboot-longguopeng #] nand erase 0x400000 0xfc00000
進入文件系統:
[qt@longguopeng /]# mount /dev/mtdblock2 /mnt //掛載
[qt@longguopeng /]# tar -vxf /qt_rootfs.tar -C /mnt //解壓
[qt@longguopeng /]# sync //同步
[qt@longguopeng /]# rm -rf /etc/pointercal //觸屏校對
u-boot操作:
設置啓動方式:
[uboot-longguopeng #] set bootargs root=/dev/mtdblock2 rw console=ttySAC0,115200 mem=128M
[uboot-longguopeng #] save
**************************************************************************************************