Dream998

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

//移植dm9000网卡驱动到linux-3.4.2内核

//试验mini2440机器ID
set machid 7CF
boot
ifconfig eth0 192.168.31.203
mount -t nfs -o nolock,vers=2 192.168.31.202:/work/nfs_root/fs_mini_mdev_new /mnt
ls /mnt
//测试挂载成功

 

移植dm9000到linux-3.4.2
修改mach-smdk2440.c(位于arch/arm/mach-s3c24xx/mach-smdk2440.c)
(使它也支持内核自带的DM9000网卡驱动)
1)添加头文件

#include <linux/dm9000.h> 

 


2)添加全局变量:

#define MACH_SMDK2440_DM9K_BASE (S3C2410_CS4 + 0x300)
static struct resource smdk2440_dm9k_resource[] = {
[0] = {
.start = MACH_SMDK2440_DM9K_BASE,
.end = MACH_SMDK2440_DM9K_BASE + 3,
.flags = IORESOURCE_MEM
},
[1] = {
.start = MACH_SMDK2440_DM9K_BASE + 4,
.end = MACH_SMDK2440_DM9K_BASE + 7,
.flags = IORESOURCE_MEM
},
[2] = {
.start = IRQ_EINT7,
.end = IRQ_EINT7,
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE,
}
};
/*
* The DM9000 has no eeprom, and it's MAC address is set by
* the bootloader before starting the kernel.
*/
static struct dm9000_plat_data SMDK2440_dm9k_pdata = {
.flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM),
};

static struct platform_device smdk2440_device_eth = {
.name = "dm9000",
.id = -1,
.num_resources = ARRAY_SIZE(smdk2440_dm9k_resource),
.resource = smdk2440_dm9k_resource,
.dev = {
.platform_data = &SMDK2440_dm9k_pdata,
},
};

 



3)在smdk2440_devices[]数组下添加:

static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_ohci,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&smdk2440_device_eth, //添加该句
};

 


然后编译烧写
cd /work/system/linux-3.4.2
make uImage
cp arch/arm/boot/uImage /work/nfs_root/uImage_net
开发板上操作
nfs 32000000 192.168.31.202:/work/nfs_root/uImage_net
set machid 16a //设置机器码
bootm 32000000

ifconfig eth0 192.168.31.203
mount -t nfs -o nolock,vers=2 192.168.31.202:/work/nfs_root/fs_mini_mdev_new /mnt
ls /mnt


//新建drivers_and_test_new目录
cd /work/
mkdir drivers_and_test_new
cd drivers_and_test_new/
mkdir 17th_dm9000c
把D:\work\S3C2440\MINI2440\drivers_and_test_new 复制到/work/drivers_and_test_new/
cd /work/drivers_and_test_new/17th_dm9000c
make
cp dm9dev9000c.c /work/system/linux-3.4.2/drivers/net/ethernet/davicom/
cd /work/system/linux-3.4.2/drivers/net/ethernet/davicom/
vi Makefile

obj-$(CONFIG_DM9000) += dm9000.o

改为

#obj-$(CONFIG_DM9000) += dm9000.o
obj-$(CONFIG_DM9000) += dm9dev9000c.o

 

//编译内核
cd /work/system/linux-3.4.2
make uImage
cp arch/arm/boot/uImage /work/nfs_root/uImage_net_new

开发板上操作
//设置可以用nfs启动挂载根文件系统
set bootargs console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.31.202:/work/nfs_root/fs_mini_mdev_new ip=192.168.31.203:192.168.31.202:192.168.31.1:255.255.255.0::eth0:off
//说明:nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
// ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
save
nfs 30000000 192.168.31.202:/work/nfs_root/uImage_net_new
bootm 30000000
//在根文件系统上操作
ifconfig eth0 192.168.31.203
ifconfig
ping 192.168.31.202
mount -t nfs -o nolock,vers=2 192.168.31.202:/work/nfs_root/fs_mini_mdev_new /mnt
ls /mnt

 


//移植网卡驱动完成,下面移植led和按键驱动
//移植first_drv
cd /work/drivers_and_test_new/first_drv
make
cp first_drv.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
arm-linux-gcc -o firstdrvtest firstdrvtest.c
cp firstdrvtest /work/nfs_root/fs_mini_mdev_new //复制测试程序

//开发板操作
insmod first_drv.ko
lsmod
ls /dev/xyz -l
cat /proc/devices //查询设备节点
./firstdrvtest on //led开
./firstdrvtest off //led关

 


//移植second_drv
cd /work/drivers_and_test_new/second_drv
make
cp second_drv.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
arm-linux-gcc -o seconddrvtest seconddrvtest.c
cp seconddrvtest /work/nfs_root/fs_mini_mdev_new //复制测试程序

//开发板操作
insmod second_drv.ko
./seconddrvtest
//按下按键查看结果

 

 

//移植third_drv
cd /work/drivers_and_test_new/third_drv
make
cp third_drv.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
arm-linux-gcc -o thirddrvtest thirddrvtest.c
cp thirddrvtest /work/nfs_root/fs_mini_mdev_new //复制测试程序

//开发板操作
mkdir /lib/modules/3.4.2
rmmod first_drv
rmmod second_drv
insmod third_drv.ko
./thirddrvtest &
cat /proc/interrupts //查询中断号
ps
kill -9 962
rmmod third_drv

 


//移植forth_drv
cd /work/drivers_and_test_new/forth_drv
make
cp forth_drv.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
arm-linux-gcc -o forthdrvtest forthdrvtest.c
cp forthdrvtest /work/nfs_root/fs_mini_mdev_new //复制测试程序

//开发板操作
insmod forth_drv.ko
./forthdrvtest &
//按下按键查看测试结果

 


//移植fifth_drv
cd /work/drivers_and_test_new/fifth_drv
make
cp fifth_drv.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
arm-linux-gcc -o fifthdrvtest fifthdrvtest.c
cp fifthdrvtest /work/nfs_root/fs_mini_mdev_new //复制测试程序

//开发板操作
insmod fifth_drv.ko
./fifthdrvtest &
//按下按键查看测试结果
cat /proc/interrupts //查询中断号

 

 


//移植sixth_drv
cd /work/drivers_and_test_new/sixth_drv
make
cp sixth_drv.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
arm-linux-gcc -o sixthdrvtest sixthdrvtest.c
cp sixthdrvtest /work/nfs_root/fs_mini_mdev_new //复制测试程序

//开发板操作
insmod sixth_drv.ko
./sixthdrvtest &
//按下按键查看测试结果

 


//移植7th_buttons_all
cd /work/drivers_and_test_new/7th_buttons_all
make
cp button.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
arm-linux-gcc -o buttons_test buttons_test.c
cp buttons_test /work/nfs_root/fs_mini_mdev_new //复制测试程序

//开发板操作
insmod buttons.ko
./buttons_test &
//按下按键查看测试结果

 

 

//移植10th_lcd
cd /work/drivers_and_test_new/10th_lcd
make
cp lcd.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
//arm-linux-gcc -o buttons_test buttons_test.c
//cp buttons_test /work/nfs_root/fs_mini_mdev_new //复制测试程序


cd /work/system/linux-3.4.2
make menuconfig //配置内核

│ Location: │
│ -> Device Drivers │
│ -> Graphics support │
│ -> Support for frame buffer devices (FB [=y]) 
<M> S3C2410 LCD framebuffer support //设为模块化
<M> Silicon Motion SM501 framebuffer support //设为模块化

 

make uImage
make modules
cp arch/arm/boot/uImage /work/nfs_root/uImage_nolcd

//复制测试程序
cd /work/drivers_and_test_new/fb_test
make clean
make
cp fb_test /work/nfs_root/fs_mini_mdev_new


//复制驱动库
cd /work/system/linux-3.4.2/drivers/video
cp cfb*ko /work/nfs_root/fs_mini_mdev_new

 

//开发板操作
nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nolcd
bootm 30000000
insmod cfbcopyarea.ko
insmod cfbimgblt.ko
insmod cfbfillrect.ko
insmod lcd.ko
./fb_test /dev/fb0
echo hello > /dev/tty1

 

 

 

//移植8th_buttons_input
cd /work/drivers_and_test_new/8th_buttons_input
make
cp buttons.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序


//修改inittab文件
cd /work/nfs_root/fs_mini_mdev_new
vi /etc/inittab
增加一行:
tty1::askfirst:-/bin/sh

//开发板操作
nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nolcd
bootm 30000000
insmod cfbcopyarea.ko
insmod cfbimgblt.ko
insmod cfbfillrect.ko
insmod lcd.ko
insmod buttons.ko
//按下按键查看测试结果

 

 

 

//移植11th_ts
修改内核文件:
sudo chmod +w /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux/input.h
sudo vi /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include/linux/input.h

#define EV_VERSION 0x010000

改为

#define EV_VERSION    0x010001

 

 

cd /work/drivers_and_test_new/11th_ts
make clean
make
cp s3c_ts.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序
//编译tslib
tar xzf tslib-1.4.tar.gz
cd /work/drivers_and_test_new/11th_ts/tslib
./autogen.sh //自动生成
mkdir tmp
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$(pwd)/tmp
make clean
make
make install
cd tmp
cp * -rf /work/nfs_root/fs_mini_mdev_new


修改vi /work/nfs_root/fs_mini_mdev_new/etc/ts.conf第1行(去掉#号和第一个空格):

# module_raw input

改为:

module_raw input

 


//开发板上操作
nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nolcd
bootm 30000000
insmod cfbcopyarea.ko
insmod cfbimgblt.ko
insmod cfbfillrect.ko
insmod s3c_ts.ko
insmod lcd.ko
insmod buttons.ko


export TSLIB_TSDEVICE=/dev/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0

ts_calibrate //校准触摸屏
ts_test //测试触摸屏

 

 

//移植12th_usb
cd /work/drivers_and_test_new/12th_usb
make
cp usbmouse_as_key.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序

//开发板操作
ls /dev/event*
insmod usbmouse_as_key.ko
ls /dev/event*
cat /dev/event2 //或者event0、event1
//插上usb鼠标按左右中键测试

 

 

//移植13th_ramblock
cd /work/drivers_and_test_new/13th_ramblock
make
cp ramblock.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序

//开发板操作
nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nolcd
bootm 30000000
insmod ramblock.ko
mkdosfs /dev/ramblock //格式化整个分区
mount -t vfat /dev/ramblock /mnt
ls /mnt
cd /mnt
vi 1.txt
cd /
umount /mnt
mount -t vfat /dev/ramblock /mnt
cat /mnt/1.txt
umount /mnt
fdisk /dev/ramblock //开始建立分区
m //查看帮助信息
n //添加一个新分区
p //添加主分区
1 //第一个分区
1 //第一个柱面号为1
16 //第二个柱面号为16
n //添加新分区
p //添加主分区
2 //第二个分区
17 //第一个柱面号为17
32 //第二个柱面号为32
w //写入扇区并退出
ls /dev/ramblock* //查看分区表

 

 

 

//移植14th_nand
cd /work/drivers_and_test_new/14th_nand
make
cp s3c_nand.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序


cd /work/system/linux-3.4.2
make menuconfig //配置内核

Location: │
│ -> Device Drivers │
│ -> Memory Technology Device (MTD) support (MTD [=y]) │
│ -> NAND Device Support (MTD_NAND [=y]) 
< >NAND Flash support for Samsung S3C SoCs //取消选中

 




make uImage
cp arch/arm/boot/uImage /work/nfs_root/uImage_nonand

//开发板操作
nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nonand
bootm 30000000
ls /dev/mtd*
insmod s3c_nand.ko
mount -t yaffs /dev/mtdblock3 /mnt //挂载root分区
ls /mnt






//移植15th_nor
cd /work/drivers_and_test_new/15th_nor
make
cp s3c_nor.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序


//开发板操作
nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nonand
bootm 30000000
insmod s3c_nor.ko
ls /dev/mtd*






//移植16th_virt_net
cd /work/drivers_and_test_new/16th_virt_net
make
cp virt_net.ko /work/nfs_root/fs_mini_mdev_new //复制驱动程序

//开发板操作
nfs 30000000 192.168.31.202:/work/nfs_root/uImage_nonand
bootm 30000000
insmod virt_net.ko
ifconfig vnet0 3.3.3.3
ifconfig vnet0
ping 3.3.3.3
ping 3.3.3.4

 

 



 

posted on 2018-04-08 14:00  Dream998  阅读(707)  评论(0编辑  收藏  举报