ARM Cortex-A9 (tiny 4412)
Posted destiny_sea
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARM Cortex-A9 (tiny 4412)相关的知识,希望对你有一定的参考价值。
要求
移植linux增加系统调用并烧写至开发板
详细步骤
一、搭建linux编译环境
1、GCC 编译器的安装:
tar xzvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz -C/
arm-linux-gcc -v //查看GCC版本
2、gedit ~/.bashrc
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin
3、reboot -p 重启
4、cp -f tiny4412_android_defconfig .config
make -->编译
5、安装libz.so
yum install zlib.i686
6、挂载红帽6.4iso镜像
mount -o loop rhel-server-6.4-x86_64-dvd.iso /mnt
yum install zlib.i686
编译 --> make
1)配置yum:
root@localhost 桌面]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
rhel-source.repo
[root@localhost yum.repos.d]# cp rhel-source.repo my.repo
gedit my.repo
[rhel-source]
name=rhel-source
baseurl=file:///mnt
enabled=1
gpgcheck=0
挂载红帽6.4镜像mount -o loop rhel-server-6.4-x86_64-dvd.iso /mnt
yum install zlib.i686 (for libz.so ,when build linux)
yum install minicom*
yum install ncurses*.i686 (for libncurses.so, when install adb)
yum install libstdc++.i686 (for libstdc++.so,when build android)
2)minicom串口通信工具的安装:
arm-linux-gcc交叉编译环境搭建:
FriendlyARM/tiny4412
yum install minicom*
cd /usr/bin ls /dev/ttyu*
minicom -s 修改默认设备名为ttyUSB0 硬件设备控制关掉 SAVE
开着minicom, 开关板子会出现log
烧写SD启动卡:
(1)、红帽6.4系统下插入事先准备好的SD卡;
查看SD卡设备信息,确定设备别名(重要!不可弄错) :
查看SD卡信息 fdisk -l
Ls sd /dev/sd* -ll //此处SD卡设备名为sdb
(2)、对SD 卡进行分区 ;
先删除SD卡所有分区:
Fdisk /dev/sdb
命令选项
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition\'s system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
d 删除所有分区
(3)、p 新建1个主分区
分区前需留100M给Supperboot
公式:
SD卡内存*1024M:内存柱数=100M:起始柱面数
如图2 所示32G SD卡总柱面为19165,套用以上公式计算起始柱面为58;
(4)、修改分区的system id 选择 t
(5)、选择分区类型
l -类型清单
b -在此只能选择FAT32格式
(6)、输入w保存退出
(7)、格式化分区
mkfs.vfat /dev/sdb
(8)、烧写boot程序
sync 执行一下同步命令
(9)、把 image 复制到SD卡中 SD启动卡即制作完成
将SD卡插到板子上进行烧机
二、 搭建NFS文件系统环境
1、 安装minicom
配置yum安装源并安装 yum install minicom
2、 配置PC 端NFS服务
1)关闭PC端防火墙 setup
保存退出
临时关闭 iptables service iptables stop
关闭selinux setenforce 0
查看selinux并修改SELINUX =disabled
gedit /etc/selinux/config
2)写NFS配置文件
gedit /etc/exports
/uplookingroot *(rw,sync,no_root_squash)
3)在PC上建立目录 /uplookingroot
用网线连接PC和板子
重启PC reboot -p
4)启动NFS服务 service nfs restart
5)配置IP地址 ifconfig eth0 192.168.1.10 up
测试PC 板子之间的连接 ping 192.168.1.20
6)进入板子 minicom .....
7)挂载目录
mount -t nfs -o nolock,rw 192.168.1.10:/uplookingroot /mnt
8)PC端在/uplookingroot 内编写要传输的文件 minicom端口可见
板子下:cd /mnt
[root@localhost mnt]# ls //可见文件 Hello.c
dnw工具的安装:
tar xzvf dnw-linux.tar.gz
cd dnw-linux/
make
退出挂载 umount /mnt
三、 修改linux内核,增加新的系统调用
1、 解压编译linux源代码,测试当前源代码是否可执行
[root@localhost / ]# tar xzvf linux-3.5-20150121.tgz
cp tiny 4412_linux_defconfig .config
make -j4
ls arch/arm/boot/zImage -ll
2、将zImage拷贝到网络启动的SD卡刷机 //SD卡刷机见一
1)SD卡使用Superboot
[root@localhost install]# ./write4412boot Superboot4412.bin /dev/sdc
start ...........
end .....……
2)同步 sync
3)nfs 环境 //参考二
3、修改linux3.5源码增加系统调用
1) 修改calls.S
[root@localhost linux-3.5]# gedit arch/arm/kernel/calls.S
/* 378 */ CALL(sys_add)
2)gedit /linux-3.5/arch/arm/include/asm/unistd.h
©#define __NR_process_vm_writev (__NR_SYSCALL_BASE+377)
©#define __NR_add (__NR_SYSCALL_BASE+378)
3)
gedit /linux-3.5/arch/arm/kernel/sys_arm.c
asmlinkage long sys_add(int a, int b){
return (a + b);
}
4)编译
[root@localhost linux-3.5]# make
4、将新的zImage拷贝到网络启动的SD卡刷机
5、 做一个动态库
cd /home/material/code/code_driver/02syscall/01user_so
[root@localhost 01user_so]# ls
add.c add.h test.c
编译
[root@localhost 01user_so]# arm-linux-gcc -shared -fpic add.c -o libadd.so
[root@localhost 01user_so]# ls
add.c add.h libadd.so test.c
6、生成测试程序
[root@localhost 01user_so]# arm-linux-gcc test.c -o test -L./ -ladd
[root@localhost 01user_so]# ls
add.c add.h libadd.so test test.c
7、 将libadd.so 和 test 下载到开发板
[root@localhost 01user_so]# cp -f libadd.so /uplookingroot/.
[root@localhost 01user_so]# cp -f test /uplookingroot/.
8、进入板子
挂载共享目录
[roorplooking /mount -t nfs -o nolock,rw 192.168.1.10:/uplookingroot /mnt
将libadd.so 拷贝到/lib
[roorplooking /cd /mnt
[roorplooking /mnt cp libadd.so /lib/.
测试
[roorplooking /mnt./test
c =
4
四、写应用程序测试系统
由于Supperboot不能支持我们自己修改的内核,重新编译内核
tar -xvf linux-3.5-20150121.tgz -C /root
cd linux-3.5
cp tiny4412_linux_defconfig .config
make -j4
构建刷机sd卡: //由于前面已经给sd分过区,在此省略分区操作
images拷贝到sd卡 把sd卡插入PC
cp /arch/arm/boot/zImage Linux/zImage
vim FriendlyARM.ini
OS=Linux
把sd卡插入开发板进行刷机
将开发板与PC进行连接
minicom
开发板开机
配置PC ip ifconfig etho 192.168.1.10
ping 192.168.1.20 测试PC与板子的通讯
挂载共享目录
[roorplooking /mount -t nfs -o nolock,rw 192.168.1.10:/uplookingroot /mnt
将新的zImage拷贝到网络启动的SD卡刷机
编译
[root@localhost 01user_so]# arm-linux-gcc -shared -fpic add.c -o libadd.so
[root@localhost 01user_so]# ls
add.c add.h libadd.so test.c
生成测试程序
[root@localhost 01user_so]# arm-linux-gcc test.c -o test -L./ -ladd
[root@localhost 01user_so]# ls
add.c add.h libadd.so test test.c
将libadd.so 和 test 下载到开发板
[root@localhost 01user_so]# cp -f libadd.so /uplookingroot/.
[root@localhost 01user_so]# cp -f test /uplookingroot/.
将libadd.so 拷贝到/lib
[roorplooking /cd /mnt
[roorplooking /mnt cp libadd.so /lib/.
测试
[roorplooking /mnt./test
c =
4
效果
以上是关于ARM Cortex-A9 (tiny 4412)的主要内容,如果未能解决你的问题,请参考以下文章