1、安装编译工具:arm-linux-gnueabihf-gcc
进入这个网站:https://launchpad.net/linaro-toolchain-binaries/trunk/2013.10/+download/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.bz2
然后就能获取arm-linux-gnueabihf-gcc的源码。解压在/home/yuzhiyong/software/
路径下面。接下来的配置步骤和arm-linux-gcc就是一样的了。
在root用户下使用:
打开文件:vim
/root/.bashrc ;在文件末尾添加代码:
export
PATH=/home/yuzhiyong/software/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin:$PATH
打开文件:vim
/etc/profile ;在文件末尾添加代码:
export
CROSS_COMPILE=/home/yuzhiyong/software/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm
-linux-gnueabi-
export
ARCH=arm //指定CPU架构
export
LOADADDR=0x8000//指定引导地址
在普通用户下使用:
首先,以普通用户登入:输入命令,打开文件vim
~/.bashrc
,在文件末尾添加:
export
PATH=/home/yuzhiyong/software/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin:$PATH
然后,切换root用户:输入命令,打开文件vim
/etc/profile ,在文件末尾添加:
PATH=/home/yuzhiyong/software/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin:$PATH
2、获取内核源码并编译
在Linux下新建一个kernel目录,进入该目录,输入命令:
git
clone git://git.rocketboards.org/linux-socfpga.git
完成后会有一个linux-socfpga的目录,进入该目录,输入命令查看已经发布的版本:
git
branch –r
然后输入以下命令获取源码:
git
checkout -b kenel_3.12 origin/socfpga-3.12
在执行以下语句(第一个是以soc的默认配置来配置内核):
make
socfpga_defconfig//使用内核中针对于socfpga默认的配置
make
zImage //开始编译内核
完成后,在arm/arch/boot目录下面看到内核:zImage。
3、更新驱动程序
将SD卡中的zImage用自己编译的内核替换掉。插入板子可以正常运行。将驱动程序文件拷贝到虚拟机上,并且驱动目录和内核源码目录都放在/home/yuzhiyong/kernel目录下,进入驱动文件目录即可编译。将用新内核编译的驱动程序也拷贝到SD卡上。然后加载驱动程序,出现以下错误:device
or resource busy。
错误原因是:驱动程序分配的主设备号已经被占用。
使用命令:cat
/proc/devices 查看系统已经分配的设备号:发现驱动程序中分配的设备号251被占用。然后将驱动程序中的主设备号改为没被占用的250,重新编译后拷贝到SD卡。再次加载驱动程序,发现还是错误,发现是运行脚本test.sh的问题,脚本里面新建节点时也使用了主设备号,改为250后,一切运行正常。