现在想学驱动编程, 所以用了一个纯净的内核,直接从官网下载了3.8.3 版本的内核.
从三个方面介绍:
第一个 ,也是我们的第一步,uboot配置。
我使用的是 http://blog.csdn.net/liukun321/article/details/8558425 的4.0 版本uboot。
编译方法有很在文章里有很详细的介绍,我说一下要注意的事项,及我所遇到的问题:
(1)拿到源码后,首先要make distclean,去除残留要不然直接编译会报错。
(2)在执行 另外两条命令 make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- tiny210_config
make ARCH=arm CROSS_COMPILE=/opt/FriendlyARM/toolschain/4.5.1/bin/arm-none-linux-gnueabi- all spl
如果支持sd卡启动,要把我们编译源代码生成的tiny210-uboot.bin 用命令sudo dd iflag=dsync oflag=dsync if=tiny210-uboot.bin of=/dev/sdb seek=1
烧写到sd 卡中,tiny210板子选择sd卡启动模式,就可以启动uboot ,然后利用tftp 上传tiny210-uboot.bin 到nand flash,就完成了uboot移植。
说说我遇到的问题,我烧写sd卡uboot的时候没有问题,但是我把tiny210-uboot.bin 文件烧写到nand flash 的时候,板子uboot失败,蜂鸣器会响,串口显示乱码,
于是我把烧录分成了下面几步:
1. 首先 用 nand erase.chip 擦除整个nand
2. 用tftp 上传 tftp 21000000 /home/smile_maidou/tftp/tiny210-spl.bin (该文件位于 tiny210-u-boot-version4.0/spl/tiny210-spl.bin)
3. nand write.e 21000000 0 6000 (这个值要看你的tiny210-spl.bin 文件大小而定,有的只有4k, 而我用的是24k, 我们iram 有94k 不用怕)
4. 再tftp 上传我们的 u-boot.bin 命令tftp 21000000 /home/smile_maidou/tftp/u-boot.bin (这个文件位于tiny210-u-boot-version4.0/tiny210-uboot.bin)
5.写nand nand write.e 21000000 6000 (spl.bin 的大小) 3635c (我们生成的u-boot.bin大小)
然后把开关从sd 卡启动 调整到nand 启动 就可以了,就可以看到完整的uboot输出。
第二个, 配置linux内核。
我使用的是3.8.3版本内核,先检测内核是否可用:
(1)make distclean
(2)修改makefile ARCH=arm CROSS_COMPILE=arm-linux-;
(3)make s5pv210_defconfig
(4) make uImage
这个过程中 第一步应该不会有错,第二部如果报错没有发现arm-linux-xxx,你就要检查你的PATH 变量里是否包含交叉编译器的可执行文件,用命令
echo $PATH 查看 争取显示如下:
root@ubuntu:~/cross_compiler/busybox-1_21_0# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/smile_maidou/cross_compiler/opt/FriendlyARM/toolschain/4.5.1/bin
第三步报错,没发现s5pv210_defconfig 这个文件,你要检查下是不是你拼写错误,如果无误,进入内核源码linux-3.8.3/arch/arm/configs,查看该文件是否存在,
如果报
*** Unable to find the ncurses libraries or the
*** required header files.
*** 'make menuconfig' requires the ncurses libraries.
***
*** Install ncurses (ncurses-devel) and try again.
***
make[1]: *** [scripts/kconfig/dochecklxdialog] 错误 1
make: *** [menuconfig] 错误2
你需要安装一个库,sudo apt-get install ncurses 就可以解决这个问题。
第四步,如果出现 "mkimage" command not found - U-Boot images will not be built
make[1]: *** [arch/arm/boot/uImage] Error 1
make: *** [uImage] Error 2
这个错误是因为你没有生成mkimage 工具, 这个工具的源代码一般友善之臂会提供,你只需编译源码,把生成的mkimage文件拷贝到 //usr/bin 下面就可以了
注:建议用root 编译 ,会少很多不必要的麻烦。
这几步都完成之后,我们开始对内核做出修改。
如果你用的是虚拟机linux, 建议在虚拟机中运行make menuconfig 命令,如果是在远程登录工具中使用这个命令有些值无法修改。
1. 运行 make menuconfig
内核默认使用UART1打印信息,我们使用的是uart0
对话中依次选择System type => (1) S3C UART to use for low-level messages,在编辑框中将1改为0,然后保存配置并再次编译内核,直接执行make即可,无需
make clean。
配置内核支持NFS
配置nfs 启动相关内核选项
[*]Networking support -->
Networking options-->
[*]TCP/IP networking
[*] ip:kernel level autoconfiguration
[*] IP:BOOTP support
网卡支持 device drivers -->
[*] Networking device support--->
[*]ethernet driver support-->
[*]DM9000 support
网络文件系统支持
File system --->
Networking File System --->
[*]NFS client support
[*]NFS client support for NFS VERSION 2
[*]NFS client support for NFS VERSION 3
[*]NFS client support for NFS VERSION 4
[*] Roor file system on NFS
修改机械码 文件路径是/linux-3.8.3/arch/arm/tools/mach-types
vim /linux-3.8.3/arch/arm/tools/mach-types
smdkv210 MACH_SMDKV210 SMDKV210 3466 (原来是2456)
修改网卡驱动
//arch/arm/mach-s5pv210/mach-smdkv210.c
#define
#define
//