修改 Linux 内核 DM9000 支持 tiny210 开发板

发布者:电子艺术大师最新更新时间:2025-01-14 来源: cnblogs关键字:Linux  内核  DM9000  tiny210  开发板 手机看文章 扫描二维码
随时随地手机看文章

错误现象:

dm9000 dm9000: read wrong id 0x2b2a2928
dm9000 dm9000: wrong id: 0x2b2a2928
dm9000 dm9000: not found (-19).

TCP cubic registered
NET: Registered protocol family 17
Registering the dns_resolver key type
VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 2
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device 'nfs' or unknown-block(2,0)
Please append a correct 'root=' boot option; here are the available partitions:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)



配置内核支持NFS + DM9000 ,部分引用网络文章:

(1) 配置网络支持
[*] Networking support  --->
    Networking options  --->
        <*> Packet socket 
        <*> Unix domain sockets
        [*] TCP/IP networking
        [*]   IP: multicasting
        [*]   IP: kernel level autoconfiguration 
        [*]     IP: DHCP support
        [*]     IP: BOOTP support
        [*]     IP: RARP support
        [*]   IP: multicast routing
        
(2) 配置网卡设备支持
Device Drivers  --->
    [*] Network device support  ---> 
        [*]   Ethernet driver support  --->
            <*>   DM9000 support

(3) 配置网络文件系统支持
File systems  ---> 
    [*] Network File Systems  ---> 
        <*>   NFS client support 
        <*>     NFS client support for NFS version 2
        <*>     NFS client support for NFS version 3
        [*]       NFS client support for the NFSv3 ACL protocol extension
        <*>     NFS client support for NFS version 4
        [*]   Root file system on NFS


再配置NFS ,ubuntu下配置NFS服务器很简单
sudo apt-get install nfs-kernel-server

然后以根权限打开/etc/exports文件,我的NFS根目录为/nfsroot,一般情况使用版本2,3,故设置export为
/nfsroot/   *(rw,sync,no_subtree_check)
共享的目录名    所有IP(各种属性)
属性中 no_subtree_check 最好是带上,我本来不太清楚,使用了no_root_squash,结果会导致 mount.nfs:access denied by server while mounting等错误
最后,还要修改下/nfsroot的权限,为了以后使用方便。
chmod 755 /nfsroot

再附带几个用到的命令:
重启NFS服务:    sudo /etc/init.d/nfs-kernel-server restart
如果提示 Cannot register service: RPC: Unable to receive; errno = Connection refused 
需要先安装 portmap ,再启动之 sudo /etc/init.d/portmap start

接下来是修改内核,支持DM9000网卡

//arch/arm/mach-s5pv210/mach-smdkv210.c
  
#define S5PV210_PA_DM9000_A     (0x88001000)    
#define S5PV210_PA_DM9000_F     (S5PV210_PA_DM9000_A + 0x300C)   
//   
static struct resource smdkv210_dm9000_resources[] = {
    [0] = {
        .start  = S5PV210_PA_DM9000_A, //地址线
        .end    = S5PV210_PA_DM9000_A + SZ_1K*4 - 1,
        .flags  = IORESOURCE_MEM,
    },
    [1] = {
        .start  = S5PV210_PA_DM9000_F, //数据线
        .end    = S5PV210_PA_DM9000_F + SZ_1K*4 - 1,
        .flags  = IORESOURCE_MEM,
    },
    [2] = {
        .start  = IRQ_EINT(7),
        .end    = IRQ_EINT(7),
        .flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,//中断资源和高频存储发资源
    },  
}; 

static struct dm9000_plat_data smdkv210_dm9000_platdata = {
    .flags = DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM, //16bit模式
    .dev_addr = { 0x08, 0x90, 0x00, 0xa0, 0x02, 0x10 }, //设置网卡的物理地址
};

static void __init smdkv210_dm9000_init(void)  
{  
    unsigned int tmp;  
  
    gpio_request(S5PV210_MP01(1), 'nCS1');  
    s3c_gpio_cfgpin(S5PV210_MP01(1), S3C_GPIO_SFN(2));  
    gpio_free(S5PV210_MP01(1));  
  
    tmp = (5 << S5P_SROM_BCX__TACC__SHIFT);  
    __raw_writel(tmp, S5P_SROM_BC1);  
  
    tmp = __raw_readl(S5P_SROM_BW);  
    tmp &= (S5P_SROM_BW__CS_MASK << S5P_SROM_BW__NCS1__SHIFT);  
    tmp |= (1 << S5P_SROM_BW__NCS1__SHIFT);  
    __raw_writel(tmp, S5P_SROM_BW);  
}


关键字:Linux  内核  DM9000  tiny210  开发板 引用地址:修改 Linux 内核 DM9000 支持 tiny210 开发板

上一篇:x210-2022-12-24
下一篇:nand驱动移植

推荐阅读最新更新时间:2026-03-25 14:52

迅为工业RK3568 itop-3568开发板Linux驱动开发实战:RK3568内核模块符号导出详解
迅为工业级稳定可靠的RK3568平台itop-3568开发板驱动开发实战:RK3568内核模块符号导出深入解析 选择迅为iTOP-3568开发板,获取完整驱动开发套件与工业级稳定性保障 在复杂的Linux驱动开发中,模块化设计是提升代码可维护性和复用性的关键。内核模块符号导出正是实现模块间的基础技术。本期将基于迅为RK3568开发板,深入讲解这一核心机制。 迅为提供的完整驱动开发套件,包含从基础教程到进阶实战的全套代码示例,助您快速掌握此类核心驱动开发技巧。 第5章 内核模块符号导出实验 本章节我们学习内核模块符号导出,什么是内核模块符号导出呢?内核模块之间是相互独 立的,互相不能直接访问。将内核模块的符号(函
[嵌入式]
迅为工业RK3568 itop-3568<font color='red'>开发板</font><font color='red'>Linux</font>驱动开发实战:RK3568<font color='red'>内核</font>模块符号导出详解
linux-3.0内核移植到fl2440开发板(以s3c2410为模板)
1.新建kernel文件夹,用于存放内核文件 $ mkdir kernel 2.进入kernel,上传压并解压压缩文件 $cd kernel $ tar -xjf linux-3.0.tar.bz2 3.进入linux-3.0 cd linux-3.0 4.修改makefile,配置CPU类型和交叉编译器(195,196行) ARCH ?=arm CROSS_COMPILE ?=/opt/buildroot-2012.08/arm926t/usr/bin/arm-linux- 交叉编译器路径每个人不太一样,大家把路径都换成自己的,另外在配置交叉编译器路径的时候,不要多加多余的空格,否则编译器不会被找到。 在同一
[单片机]
OK6410A 开发板 (八) 29 linux-5.11 OK6410A 主要内核线程解析
kthreadd这篇博客简述了 一下 系统内创建的 所有内核线程 // 进程 1 2 的 父进程为 0 // 其他所有内核线程(被 包括的) 父进程都是 kthreadd 进程ID 所属用户 状态 COMMAND进程名 进程创建文件 进程创建函数 // 1号用户进程 1 root 1412 S {linuxrc} init //init/main.c kernel_thread // 1号用户进程 // 2号内核进程 2 root 0 SW // init/main.c kernel_thread // 2号内核线程,负责 创建所有的内核线程 //
[单片机]
OK6410A 开发板 (八) 67 linux-5.11 OK6410A linux 内核同步机制 per-cpu的实现
解决的问题是什么 SMP 引起的竞态 // 其实是避开了 SMP的竞态 , 因为 每个cpu 一个同名变量,SMP间根本不会有竞态发生 不能解决 其他原因 引起的竞态 其他要点 在 CONFIG_SMP 下才有意义, 不配置 CONFIG_SMP 也能用,但是就失去了他的意义(作用,) // 没有SMP,SMP引起的竞态根本就不存在了 // 而 per-cpu 就是 因为 SMP引起的竞态 才被设计出来的 在某些体系结构上,per-CPU变量可使用的地址空间是受限的,要尽量保持这些变量比较小 // 在 arm 上好像没限制 per-cpu 并没有利用 同步原语 和 屏障,因为 per-cpu的实现 是 避
[单片机]
OK6410A 开发板 (八) 71 linux-5.11 OK6410A linux 内核同步机制 禁软中断的实现
软中断是什么 软中断怎么触发 软中断发生时机 软中断发生条件 软中断 抢占 preempt_count_add 如何 加 SOFTIRQ_DISABLE_OFFSET 的话,就会 关 软中断 封装起来就是 local_bh_disable local_bh_disable __local_bh_disable_ip(_THIS_IP_, SOFTIRQ_DISABLE_OFFSET); preempt_count_add(SOFTIRQ_DISABLE_OFFSET) barrier()
[单片机]
OK6410A 开发板 (八) 75 linux-5.11 OK6410A linux 内核同步机制 读写锁的实现
实现 read_lock read_unlock include/linux/rwlock.h 71 #define read_lock(lock) _raw_read_lock(lock) include/linux/rwlock_api_smp.h 44 #define _raw_read_lock(lock) __raw_read_lock(lock) include/linux/rwlock_api_smp.h 146 static inline void __raw_read_lock(rwlock_t *lock) 147 {
[单片机]
OK6410A 开发板 (八) 76 linux-5.11 OK6410A linux 内核同步机制 顺序锁的实现
实现 获取锁 write_seqlock include/linux/seqlock.h write_seqlock spin_lock do_write_seqcount_begin read_seqbegin read_seqbegin ... read_seqretry ...
[单片机]
mini2440 u-boot linux 内核启动,移植较新(Linux3.19)内核至mini2440开发板(一)
s3c24xx-nand s3c2440-nand: Tacls=1, 9ns Twrph0=3 29ns, Twrph1=2 19ns s3c24xx-nand s3c2440-nand: NAND soft ECC nand: device found, Manufacturer ID: 0xec, Chip ID: 0xda nand: Samsung NAND 256MiB 3,3V 8-bit nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64 Creating 5 MTD partitions on nand : 0x000000
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved