最近在学mini2440的驱动,第一步就是内核的移植,以前做过,忘得差不多了,现在从做一次,记下来,以备后用!!
(1)首先是配置tftp:
1. sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
2. cd /
sudo mkdir /tftpboot
sudo chmod 777 /tftpboot
3.打开目录 /etc/xinetd.d/新建文件tftp
tftp内容:
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot -c
per_source = 11
cps = 100 2
}
4.重新启动服务:
sudo /etc/init.d/xinetd restart
5.测试:
cd /tftpboot
touch test
建立一个文件
. cd /home/usrname
登录另一个目录
. tftp 127.0.0.1
> get /tftpboot/test
如果在你的当前目录下有test文件,说明配置成功了。
(2)nfs的配置:
nfs 安装(1)
apt-get install nfs-kernel-server
apt-get install portmap nfs-common
(2)
编辑/etc/exports
/nfsboot *(rw,sync,no_root_squash)
(3)
创建nfsboot目录,并修改挂载点的属性
在根目录下sudo mkdir nfsboot
sudo chmod 777 /nfsboot
(4)
重启nfs
sudo /etc/init.d/nfs-kernel-server restart
sudo /etc/init.d/portmap restart
(5)
在本机上测试
showmount -e
三:minicom的配置
由于我用的是笔记本,所以要用到usb转串口:
安装:
sudo apt-get install minicom
配置:
1 . 在终端中输入minicom以启动minicom;
2. 先按下Ctrl + a, 放开, 再按o, 出现配置菜单.
3. 选择 Serial port setup, 此时所示图标在“Change which setting”中,键入“A”,此时光标移到第A项对应处:串口COM1对应ttyS0, COM2对应ttyS1. (注意选择)
然后save setup as dfl,退出
四:
接下来,就是编译内核了:
mini2440的光盘里带了arm-linuc-gcc-4.4.3.tar.gz和linux-2.6.32.2-mini2440-20110413.tar.gz
1、 安装交叉编译环境
# tar jxvf arm-linux-gcc-4.4.3.tar.gz
# /home/huangjin/opt/FriendlyARM/toolschain/4.4.3/bin
# ls
#vi ~/.bashrc
把这个路径添加到 PATH 环境变量中,将以下添加到~/.bashrc 启动脚本:
export PATH=$PATH:/home/huangjin/opt/FriendlyARM/toolschain/4.4.3/bin
(然后一定得source ~/.bashrc,我做的时候就是忘了这一步,导致编译环境一直弄不对)
arm-linux-gcc -v
arm-linux-gcc hello.c -o hello
2、 编译内核
解压:
linux-2.6.32.2-mini2440-20110413.tar.gz
进入内核目录:
~$ cd linux-2.6.32.2
首先修改 Makefile,找到
ARCH
?= $(SUBARCH)
CROSS_COMPILE ?=
改为
ARCH
?= arm
CROSS_COMPILE ?= arm-linux-
注意 ARCH ?=arm 后面不能有空格,要确保空格已删除干净,并且不要漏了 arm-linux-末
尾的“-”。下面对内核打 patch(注意打 patch 不要重复打):
~/linux-2.6.32.2$ patch -p1 < ../patch-2.6.27-aka
paych-2.6.27-aka网上好像有,我是管朋友要的
(确认
你的主机安装了 libncurses-dev 软件包)。
sudo apt-get install ncurses-dev
注意,打补丁,只能打一次.
然后在内核目录下有个config_mini2440_w35 文件,因为我是w35的屏,所以用这个文件,
cp config_mini2440_w35 .config
使用 menuconfig 定制内核
~/linux-2.6.32.2$ make menuconfig
查看配置菜单中的如下选项(有些已经默认选中):
1、在 Floating point emulation 中选择 NWFPE math emulation。由于 ARM920T 没有浮点
协处理器,浮点数指令需要用其它指令仿真实现。
有两种方法可以仿真浮点指令:一种方法如先前所说的,使交叉编译器支持
soft-float,
也就是一遇到 C 代码里的浮点运算就自动生成仿真指令,
另一种方法是交叉编
译器仍然生成浮点运算指令(对于 ARM 平台是指协处理器指令),然而 ARM920T 没有浮点协
处理器,无法识别浮点指令,因而产生 undefined 异常,这个 Floating point emulation
内核选项就是在 undefined 异常的处理函数中仿真实现浮点运算。
也就是说,
这里我们使用
非 soft-float 的交叉编译器并在内核中实现浮点仿真。
这样的运行效率比使用 soft-float
编译要低,因为每次浮点运算都需要处理异常和进入内核,但是兼容性好,便于我们利用别
人已编译好的程序。
2、选中 File systems -> Pseudo filesystems -> /proc file system support; Sysctl
support (/proc/sys); sysfs file system support 和 Virtual memory file system
support (former shm fs); Tmpfs POSIX Access control Lists。 /proc file system
(或者叫 procfs)是内核提供给用户程序的接口,很多 Linux 程序都需要在 procfs 中读
写数据,比如 busybox,因此这个选项一般是不能少的。Virtual memory file system(或
者叫 tmpfs)用于内存虚拟磁盘,后面我们在做根文件系统时要 mount 一个 tmpfs 到/dev
目录下。
3、不需要改变 Boot options -> Default kernel command string,因为 bootloader 中的
内核启动参数会取代这里的设置。
4、选中 Device Drivers -> Network device support -> Ethernet (10 or 100Mbit) ->
CS8900A support,添加对网卡芯片的支持。在 File systems -> Network File Systems
菜单中选上 NFS client support; client support for NFS version3; client support
NFS
NFS
for the NFSv3 ACL protocol extension 和 Root file system on NFS。
5、选中 Device Drivers -> Memory Technology Devices (MTD) -> MTD partitioning
support,在 Device Drivers -> Memory Technology Devices (MTD),选中 NAND Device
Support 和它下面的 NAND Flash support for S3C2410/S3C2440 SoC; S3C2410 NAND driver
debug,不要选择 S3C2410 NAND Hardware ECC,因为 S3C2410 硬件生成 ECC 码的算法和我
们所需要的不一致。
6、在 File systems -> Miscellaneous filesystems 中选中 YAFFS2 file system support;
Auto select yaffs2 format; cache short names in RAM, 再选上 Compressed ROM file
system support (cramfs)。
7、在 Device Drivers -> Graphics support 中选中 Support for frame buffer devices,
再选中它下面的 Enable firmware EDID; Enable video Mode Handling Helpers; S3C2410
LCD framebuffer support,不选择 Virtual Frame Buffer support 因为它是一个用于调试
的虚拟设备驱动而不是实际硬件的驱动。如果还选中了 Bootup Logo,那么在内核启动过程
中初始化 framebuffer 时会在屏幕上看到 Linux 的企鹅 logo,这是测试 framebuffer 驱动
是否正常工作最直接的方法。Bootup Logo 有三种规格,我们的开发板支持 VGA 输出,可以
选择 224 色的漂亮 logo。
8、在 Device Drivers -> USB support 中选中 Support for Host-side USB,然后选择 OHCI
HCD support,在 Device Drivers -> Input device support 中选中 Mouse interface,设
置屏幕分辨率 Horizontal screen resolution 和 Vertical screen resolution 为 1024 和
768。
9、选中 Device Drivers ->Real time clock -> Set system time from RTC on startup and
resume; /sys/class/rtc/rtcN (sysfs); /proc/driver/rtc (procfs for rtc0); /dev/rtcN
(character devices); Test driver/device.
10、如果不希望在/dev 目录下生成大量伪终端设备文件,可以取消选择 Device Drivers ->
Character devices -> Legacy (BSD) PTY support。
配置完成后用make命令编译内核,这个过程需要较长时间,编译好的内核位于
~/linux-2.6.32/arch/arm/boot/zImage。现在将自己编译的内核下载到开发板,看系统能不能正
常启动。