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
SD卡设备名
(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:起始柱面数
o_sdm.png
如图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
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

o_zimage.png

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
效果

o_arm%20y.jpg
o_arm%20bianyi.jpg

转载于:https://www.cnblogs.com/OceanF/p/9151540.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值