“Jz2440LearningFAQ”的版本间的差异

来自百问网嵌入式Linux wiki
第1行: 第1行:
 +
=前言=
 +
==页面说明==
 +
: 本页面集结了 [http://bbs.100ask.org/forum.php 百问科技论坛] 常见的问题以及解答,是非常宝贵的知识宝库,在遇到问题时打开此文档使用浏览器搜索功能 '''{{redtext|Ctrl+f}}''' ,输入你遇到的问题的关键字,在此页面中都能找到前辈爬过的和你一样的「坑」~。
 +
: 本页面持续更新ing,如果你有更好的意见或建议请联系我们,祝学习顺利!
 +
==如何解决学习过程中遇到的问题==
 +
: 出问题时,先查看命令有没有错('''不要主观上认为自己没错''',仔细检查几遍,看是否少了空格和冒号)。
 +
: 如果是跟着视频操作的也出现错误('''不要主观上觉得已经跟着视频操作''',请回看视频,看步骤是否跟对了)。
 +
: 如果以下问题没有解决你的问题,请在论坛www.100ask.org发帖,注意贴图说清问题。
 +
: 如果你的问题和以下问题都不相似或者没有解决你的问题、在网上搜索也没有解决你的问题、在讨论群中也没能得到前辈的解答时,最后有两种方法确保你的疑问可以得到解答。
 +
:: 1.在论坛上发帖,老师晚上会看帖的,'''注意贴图详细描述清楚问题,还有用过什么方法仍然没有解决''',在老师会贴解决后请回复解决带上你解决的方法,谢谢!
 +
:: 2.必要时 @ 我们在讨论群中驻守的答疑老师。
 +
 
=学习常见问题及解决方案=
 
=学习常见问题及解决方案=
 
* [[ VMwareAndUbuntuNetworkSetupGuide  | 开发板、PC、Ubuntu的网络环境搭建 ]]
 
* [[ VMwareAndUbuntuNetworkSetupGuide  | 开发板、PC、Ubuntu的网络环境搭建 ]]
第13行: 第25行:
 
* [https://zhuanlan.zhihu.com/p/28556875 NFS挂载那些事]
 
* [https://zhuanlan.zhihu.com/p/28556875 NFS挂载那些事]
 
* [https://mp.weixin.qq.com/s?__biz=MzAxNTAyOTczMw==&mid=2649328600&idx=1&sn=ef08bb2b43ea9bde4c62acc11e5beccc&chksm=83976f52b4e0e644ba66e7c531fa1242c15b28b9e69b5c0b3486abd35f146e4f59f821b903e6#rd 挂载根文件系统出现 "Kernel panic..." 的解决方案]
 
* [https://mp.weixin.qq.com/s?__biz=MzAxNTAyOTczMw==&mid=2649328600&idx=1&sn=ef08bb2b43ea9bde4c62acc11e5beccc&chksm=83976f52b4e0e644ba66e7c531fa1242c15b28b9e69b5c0b3486abd35f146e4f59f821b903e6#rd 挂载根文件系统出现 "Kernel panic..." 的解决方案]
 
+
* [http://jingyan.baidu.com/article/455a99504dc88fa16727784c.html JZ2440 V3,Win10安装PL2303_Prolific_DriverInstaller_v1.12.0,提示:未知USB设备(设备描述符请求失败)]
 
= FAQ =
 
= FAQ =
 
==Ubuntu的登录用户名和密码==
 
==Ubuntu的登录用户名和密码==
第37行: 第49行:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
: 重启开发板,依次点击 LCD 出现的 5 个「十字架」。如果问题依旧,多半是硬件问题。请联系客服解决。
 
: 重启开发板,依次点击 LCD 出现的 5 个「十字架」。如果问题依旧,多半是硬件问题。请联系客服解决。
 +
 +
==S3C2440 地址线寻址问题==
 +
: 提问:
 +
:: S3C2440 总共有 27 根地址线,加上片选信号,总共可以寻址 1G 的空间。这 1G 空间的范围是 0x00000000-0x40000000 ,以上都容易理解。但是,韦老师书的第 88 页有一句话:。。。作为32位的CPU,可以使用的地址理论上可以达到 4G 。
 +
::: 问题1:这边 32 位的 CPU 指的是,S3C2440 可以有 32 位地址线,但实际只用了 27 根?
 +
::: 问题2:27 根地址线寻址范围是 0x00000000-0x40000000 , 88 页下面的功能部件的寄存器地址都超出这个范围了,存储控制器是 0x48000000 , CPU 是如何寻址的?
 +
 +
: 解答:
 +
:: 芯片的结构大概如此:
 +
::: CPU---MMU----存储控制器-------网卡,内存,等等
 +
:: CPU是32位的,意思是说它可以发出32位的地址给MMU,这从理论上当前就是有4G个地址。
 +
:: CPU上运行的程序一般来说不可能用完所有的4G个地址,外面的MMU把CPU发出的地址映射到具体的设备上去
  
 
==如何对 JZ2440 进行格式化?==
 
==如何对 JZ2440 进行格式化?==
 
: 进入 uboot 界面, 输入 nand scrub 回车,然后输入 y 回车
 
: 进入 uboot 界面, 输入 nand scrub 回车,然后输入 y 回车
 +
 +
==重新分区遇到问题==
 +
: 提问:
 +
:: 由于编译出来的内核大于2M  所以给开发板重新分区:在uboot中把2m(kernel) 改为了4m(kernel)  ,系统起来的时候会卡住不动 如下:
 +
<syntaxhighlight lang="bash">
 +
    NAND read: device 0 offset 0x60000, size 0x400000
 +
 +
    Reading data from 0x45f800 -- 100% complete.
 +
    4194304 bytes read: OK
 +
    ## Booting image at 30007fc0 ...
 +
    Image Name:  Linux-3.4.2
 +
    Created:      2016-12-19  13:35:58 UTC
 +
    Image Type:  ARM Linux Kernel Image (uncompressed)
 +
    Data Size:    2129944 Bytes =  2 MB
 +
    Load Address: 30008000
 +
    Entry Point:  30008000
 +
    Verifying Checksum ... OK
 +
    XIP Kernel Image ... OK
 +
 +
    Starting kernel ...
 +
 +
    Uncompressing Linux... done, booting the kernel.
 +
</syntaxhighlight>
 +
: 答:
 +
<syntaxhighlight lang="bash">
 +
    set bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200
 +
</syntaxhighlight>
 +
 +
==为什么用Uboot 测试nandflash 读取不对==
 +
: 按照教程 UBOOT来读取nand flash 不对  我的开发板是V3.0版本的。 读取后 地址和数据都不对了?
 +
:: [[File:Jz2440LearningFAQ_001.png|800px]]
 +
: 答:
 +
:: 问题的解决还是需要看源码,在cmd_mem.c中,对于md命令,它是通过simple_strtoul函数来转换地址的。
 +
:: 可以看以下的源码,当前缀为“0x”时,数据被当作16进制,而你的前缀是"0X",注意是大写。
 +
:: 所以你要么改为0x4E000010,要么省掉前缀,写为4E000010
 +
<syntaxhighlight lang="bash">
 +
    unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base)
 +
    {
 +
            unsigned long result = 0,value;
 +
 +
            if (*cp == '0') {
 +
                    cp++;
 +
                    if ((*cp == 'x') && isxdigit(cp[1])) {
 +
                            base = 16;
 +
                            cp++;
 +
                    }
 +
                    if (!base) {
 +
                            base = 8;
 +
                    }
 +
            }
 +
            if (!base) {
 +
                    base = 10;
 +
            }
 +
            while (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : (islower(*cp)
 +
                ? toupper(*cp) : *cp)-'A'+10) < base) {
 +
                    result = result*base + value;
 +
                    cp++;
 +
            }
 +
            if (endp)
 +
                    *endp = (char *)cp;
 +
            return result;
 +
    }
 +
</syntaxhighlight>
 +
 +
==有关函数与指针的问题==
 +
: 提问:
 +
<syntaxhighlight lang="C">
 +
    (void (*) (unsigned long)) timer_expired;
 +
</syntaxhighlight>
 +
:: 这个语句是什么意思?
 +
:: 还有(void*)(unsigned long*)p 和 (void*)*(unsigned long*)p  有什么区别?
 +
: 解答:
 +
:: 1.(void (*)(unsigned long))timer_expired;
 +
::: 一下子看不懂可以拆开来看,()timer_expired;表示强制类型转换,
 +
::: void (*)(unsigned long)表示一个函数指针,形参为unsigned long型
 +
::: 整个语句就表示把timer_expired强制类型转换为指向函数的指针。
 +
 +
:: 2.(void*)*(unsigned long*)p;
 +
::: 首先,(unsigned long*)p将p转换为指向unsigned long型的指针,然后前面加*取地址为p的unsigned long数据,即*(unsigned long*)p,之后,再将这个值转换为(void *)型的指针。
 +
::: 意思就是,在地址p,有个unsigned long类型的数据,该数据实际上是个地址,以上表达式的结果就是这个地址。
 +
 +
::: 同理(void*)(unsigned long*)p;就可以自己理解了吧
 +
: 想详细了解还要自己上网搜:[http://blog.chinaunix.net/uid-22197900-id-359211.html 这里] 有个void指针(void *的用法)介绍。
 +
 +
==ubuntu16.04汇编代码点亮led报错==
 +
:提问:
 +
: 按照韦老师的点灯源码,编译出错:
 +
<syntaxhighlight lang="bash">
 +
    led on.S:Assembler messages:
 +
    led on.S:2:错误:invalid character(0xa3)in mnemonic
 +
    led_on.S:8:错误:no such instruction:1dr RO,=0x56000050'
 +
    led_on.S:11:错误:expecting operand after',';got nothing
 +
    led_on.S:12:错误:invalid char'['beginning operand 2 '[RO]'
 +
    led_on.S:14:错误:no such instruction:'1dr RO,=0x56000054'
 +
    led_on.S:16:错误:expecting operand after',';got nothing
 +
    led_on.S:18:错误:invalid char'['beginning operand 2 '[RO]'
 +
    led on.S:20:错误:no such instruction:'b MAIN LOOP'
 +
</syntaxhighlight>
 +
: 答:
 +
:: 这种错误是因为用了错误的编译器导致的。
 +
:: 使用视频里的arm-linux-gcc 3.4.5来编译。所以我们严格严格严格建议新手用我们的ubuntu9.10,里面有装好编译器的!
  
 
==摄像头不显示图像==
 
==摄像头不显示图像==
第46行: 第171行:
 
: 后续章节的内容,完全覆盖 xawtv 的内容
 
: 后续章节的内容,完全覆盖 xawtv 的内容
  
==视频播放==
+
==insmod失败==
: 之前的视频很流畅,仅 cmos 部分的视频很卡
+
: 提问:
: 换 http://cn.haihaisoft.com/huplayer.aspx 里的单显卡播放器 “海海软件HUPlayer”
+
:: insmod失败,出现Success (-1009029472)
 +
<syntaxhighlight lang="bash">
 +
    # insmod Ten_drv.ko
 +
    insmod: cannot insert 'Ten_drv.ko': Success (-1009029472)
 +
</syntaxhighlight>
 +
 
 +
:: 解答:
 +
<syntaxhighlight lang="bash">
 +
    insmod: cannot insert 'Ten_drv.ko': Success (-1009029472)
 +
</syntaxhighlight>
 +
:: 说明你的驱动程序是有问题的,查查 init 函数。
 +
 
 +
==嵌入式Linux应用开发完全手册问题==
 +
: 提问:
 +
:: 按照 《嵌入式Linux应用开发完全手册》 移植内核,在jz2440测试时出现 kernel-panic...  
 +
: 解答:
 +
:: 首先,书是2008年写的,开发板是2011年出的。
 +
:: 2008年那会,开发板上的NAND都是64M,用的是yaffs1文件系统
 +
:: 现在的开发板,NAND都是128M甚至更大,用的是YAFFS2文件系统
 +
:: 所以,你应该看开发板使用手册,根据手册来打补丁、制作内核
  
==xp 系统播放视频有声音无图像==
+
==Android中应用程序控制led驱动问题==
: 关闭硬件加速 具体步骤:桌面空白处点右键,“属性”->“设置”->“高级”->“疑难问题”->把“硬件加速”的滑动块拉到最左边
+
: 提问:
 +
:: android jni控制led视频中控制LED灯,我自己写了个LED  linux内核驱动,可以通过我的C语言测试程序控制LED灯 ,用安卓java程序控制时,open系统自带的leds驱动时是对的 ,但是打开我自己写的驱动时失败,这是怎么回事呢? 驱动测试了可以控制LED灯,说明驱动没问题,java调用JNI也可以打印输出,说明JNI也没问题啊,这是什么问题呢?
 +
<syntaxhighlight lang="bash">
 +
    root@ tiny4412:~#./test
 +
    native ledOpen:3
 +
    native ledCtrl:0,1,0
 +
    native ledCtrl:1,1,0
 +
    native ledCtrl:2,1,0
 +
    native ledCtrl:3,1,0
 +
    native ledCtrl:3,0,0
 +
    native ledCtrl:2,0,0
 +
    native ledCtrl:1,0,0
 +
    native ledCtrl:0,0,0
 +
    native ledClose...
 +
    root@ tiny4412:~#
 +
</syntaxhighlight>
 +
<syntaxhighlight lang="bash">
 +
    01-0113:58:24.783 22171-22171/? I/art: Not late-enabling -Xcheck: jni(already on)
 +
    01-0113:58:25.042 22171-22171/com thisway. app_0001_leddemo D/LEDDemo: native 1ed0pen:22
 +
    01-0113:58:25.057 22171-22203/com thisway. app_0001_leddemo D/OpenGLRenderer: Render dirty regions requested: t...
 +
    01-0113:58:25.062 22171-22171/com thisway. app_0001_leddemo D/Atlas: Validating map..
 +
    01-0113:58:25.13422171-22203/com thi sway. app_0001_leddemo I/OpenGlRenderer: Initialized EGL, version 1.401-0113:58:25.13622171-22203/com thi sway. app_0001_1eddemo D/OpenGLRenderer: Enabling debug mode 0
 +
</syntaxhighlight>
 +
: 解答:
 +
:: 看一下设备节点,确定它是属性是否正常。
 +
:: 这是权限问题;
 +
:: 我录JNI时忽略了这个问题,你看:
 +
<syntaxhighlight lang="bash">
 +
    device/friendly-arm/tiny4412/conf/init.tiny4412.rc:102:    chmod 0666 /dev/leds
 +
</syntaxhighlight>
 +
:: 这个文件里,它设置了属性。
 +
:: 你加上:
 +
<syntaxhighlight lang="bash">
 +
    chmod 0666 /dev/你的设备节点
 +
</syntaxhighlight>
 +
:: 然后重新 make
 +
:: 后面讲文件系统时,我再补充这个问题
  
==播放器异常停止(一般是 win7 , win10)==
+
==调用数学函数就报错==
: 点击:
+
: 提问:
 +
:: 程序如下:
 +
::: rUBRDIV1=( (int)(pclk/16./baud+0.5) -1 ) 调用数学函数就报错:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
     huplayer菜单 -> 选项 -> Tweaks -> Delete All License in your PC
+
     : undefined reference to `__divsi3'
 +
    : undefined reference to `__divsi3'
 +
    : undefined reference to `__floatsidf'
 +
    : undefined reference to `__adddf3'
 +
    : undefined reference to `__fixdfsi':
 +
    : undefined reference to `__divsi3'
 +
    : undefined reference to `__floatsidf'
 +
    : undefined reference to `__adddf3'
 +
    : undefined reference to `__fixdfsi'
 
</syntaxhighlight>
 
</syntaxhighlight>
: 然后发邮件找我们解绑后再登陆
+
: 解答:
 +
:: 到工具链的目录下去搜libgcc.a,静态链接libgcc.a时要指定绝对路径
 +
 
 +
 
 +
==可以用eop/OPENJTAG调试内核吗?==
 +
: 可以下载、可以调;
 +
: 下载到SDRAM之前,先要使用init.bin初始化SDRAM;ELF文件是vmlinux
  
==手机/平板如何观看加密视频?==
+
==mini2440做韦东山老师的项目兼容吗==
# 下载"海海软件 HUPlayer For Android 或 iOS "播放器。下载路径: www.drm-x.com -> 免费下载-下载海海软件 HUPlayer ,选择相应的手机播放器
+
: 第3期项目视频主要是应用程序,代码不用修改就可以使用任意运行LINUX的板子上,不管是S3C2440, s3c6410等都可以。
# 把视频导入到手机,使用播放器打开视频输入用户名和密码
+
: 无论什么板子,原理是相通的,只是寄存器操作/启动方式有区别
# 如果弹出"本账号只绑定一台电脑观看",则联系 weidongshan@qq.com 解绑附上你的视频用户名
+
 
# 我们不能保证手机正常观看,因为播放器不太稳定,不过我们保证 Windows 能正常观看。
+
==怎么打断JZ2440上电后的自启动==
 +
: 重启单板, 在bootdelay时间内按空格。
  
 
=专题答疑=
 
=专题答疑=
第73行: 第270行:
 
:: 2.这样做出来产品会不会带来稳定性问题?
 
:: 2.这样做出来产品会不会带来稳定性问题?
 
:: 3.如果一旦擦除坏块的标记,能恢复吗?怎么恢复?
 
:: 3.如果一旦擦除坏块的标记,能恢复吗?怎么恢复?
 +
:: [[File:Jz2440LearningFAQ_002.png|800px]]
 
: 解答:
 
: 解答:
 
:: 1.出厂时,对于坏块会标记,我们使用过程中如果发现坏了也要自己标记
 
:: 1.出厂时,对于坏块会标记,我们使用过程中如果发现坏了也要自己标记
第90行: 第288行:
 
:: NAND 不同时,电路板上要设置配置引脚为高电平或低电平,比如 NCON 引脚。
 
:: NAND 不同时,电路板上要设置配置引脚为高电平或低电平,比如 NCON 引脚。
  
==NANDFLASH 疑问==
+
==NORFLASH 疑问==
 +
==mini2440 nand启动的情况下,能不能访问nor flash==
 +
: NAND启动,不能访问NOR。
 +
 
 
==NORFLASH 初始化疑问==
 
==NORFLASH 初始化疑问==
 
: '''{{redtext|提问:}}'''
 
: '''{{redtext|提问:}}'''
第128行: 第329行:
 
::: 然后根据这些特性去找对应的编译器。
 
::: 然后根据这些特性去找对应的编译器。
 
::: 注意: uclibc 是 glibc 的简化版本,不过现在嵌入式的存储空间足够大了,基本不使用 uclibc 了。
 
::: 注意: uclibc 是 glibc 的简化版本,不过现在嵌入式的存储空间足够大了,基本不使用 uclibc 了。
 +
 +
==NFS问题==
 +
: 遇到问题时,请先参考 [VMwareAndUbuntuNetworkSetupGuide | 这里] 确保 ping 无问题;再参考 [https://zhuanlan.zhihu.com/p/28556875 这里] 确保 NFS 配置无问题。
 +
===NFS启动注意要点是?===
 +
#确保开发板能ping通虚拟机Linux
 +
#确保开发板uboot参数中指定的文件系统路径在虚拟机Linux中确实存在
 +
#确保开发板uboot参数中指定的IP是虚拟机Linux的IP,NFS文件系统中192.168.1.120:/work/nfs_root/first_fs/etc/init.d/rcS文件中如果有设置IP的命令,必须设置与虚拟机在同一网段
 +
#确保虚拟机Linux安装并启动了NFS服务
 +
#确保开发板有挂载网络文件系统路径的权限,即所用的文件系统所在目录必须在/etc/exports中声明,否则无权挂载
 +
#确保网络文件系统是正确的(可以先用光盘提供的网络文件系统测试)
 +
#编译内核所用的交叉编译器与制作文件系统所用的交叉编译器版本相同
 +
 +
===nfs服务器设置出现问题===
 +
: 提问:
 +
:: 第11课第4节 构建根文件系统之构建根文件系统:这个视频跟着韦老师的操作,前面都没有出现什么问题,手动配置nfs服务器也是正常的,但是设置从nfs服务器启动的时候却出了问题:
 +
<syntaxhighlight lang="bash">
 +
    Root-NFS: Unable to get nfsd port number from server, using default
 +
    Looking up port of RPC 100005/1 on 200.200.1.93
 +
    rpcbind: server 200.200.1.93 not responding, timed out
 +
    Root-NFS: Unable to get mountd port number from server, using default
 +
    mount: server 200.200.1.93 not responding, timed out
 +
    Root-NFS: Server returned error -5 while mounting /work/nfs_root/first_fs
 +
    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:
 +
    1f00        256 mtdblock0 (driver?)
 +
    1f01        128 mtdblock1 (driver?)
 +
    1f02      2048 mtdblock2 (driver?)
 +
    1f03    259712 mtdblock3 (driver?)
 +
    Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
 +
</syntaxhighlight>
 +
:: 看它报错的信息,好像是主机没回应,导致从主机上启动文件系统失败,但是我从设置 nfs 启动之前,开发板、虚拟机、电脑三者一直都能够 ping 的通的呀,能否看看问题是出在哪里呢?
 +
: 解答:
 +
:: 请先参考 [VMwareAndUbuntuNetworkSetupGuide | 这里] 确保 ping 无问题;再参考 [https://zhuanlan.zhihu.com/p/28556875 这里] 确保 NFS 配置无问题;
 +
:: 虚拟机提供的网络文件系统中的 /work/nfs_roots/xxx/etc/init.d/rcS 有一句修改开发板ip的指令,写死开发板的ip即可:
 +
<syntaxhighlight lang="bash">
 +
    ifconfig eth0 192.168.1.17
 +
</syntaxhighlight>
 +
 +
===使用NFS作为根文件系统来启动遇到的问题===
 +
: 提问:
 +
: 目前在学习"学前班第0课第七节",开发板就是 jz2440V2,跟着视频做到了使用NFS作为根文件系统启动,输入保存一切都正常,重启开发板后发现启动不了,串口输出如图所示。我的开发板 IP 是192.168.1.17,虚拟机的 IP 是 192.168.1.20
 +
从图中我能看懂的是 192.168.1.20 没有回应,是不是意味着开发板和虚拟机很可能是不通的?按照这个思路,虚拟机 ping 开发板,果然是不通的。接下来我是不是要输入什么指令使得开发板回到NFS作为根文件启动之前的状态,我该怎么做呢?另外从串口输出看还有木有别的什么问题?
 +
:: [[File:Jz2440LearningFAQ_003.png|800px]]
 +
: 解答:
 +
:: 请先参考 [VMwareAndUbuntuNetworkSetupGuide | 这里] 确保 ping 无问题;再参考 [https://zhuanlan.zhihu.com/p/28556875 这里] 确保 NFS 配置无问题。
 +
:: 现在开发板没有启动,在虚拟机中去PING它并不能说明任何问题。
 +
:: 1.使用FALSH根文件系统启动开发板,再在开发板中配置IP后去PING虚拟机,确保能PING通
 +
:: 使用FALSH启动的方法是,进入UBOOT,执行:
 +
<syntaxhighlight lang="bash">
 +
    set bootargs root=/dev/mtdblock3 console=ttySAC0,115200
 +
    save
 +
    reset
 +
</syntaxhighlight>
 +
:: 2.PING通之后,再执行以下命令MOUNT NFS:
 +
<syntaxhighlight lang="bash">
 +
    mount -t nfs -o nolock,vers=2 192.168.1.20:/work/nfs_root /mnt
 +
</syntaxhighlight>
 +
::: 成功的话,再去设置UBOOT的bootargs,使用NFS根文件系统;
 +
 +
:: 3.
 +
<syntaxhighlight lang="bash">
 +
    OpenJTAG> nfs 30000000 192.168.1.105:/work/nfs_root/tmp/fs.yaffs2
 +
    dm9000 i/o: 0x20000000, id: 0x90000a46
 +
    DM9000: running in 16 bit mode
 +
    MAC: 08:00:3e:26:0a:5b
 +
    could not establish link
 +
    File transfer via NFS from server 192.168.1.105; our IP address is 192.168.7.17
 +
    Filename '/work/nfs_root/tmp/fs.yaffs2'.
 +
</syntaxhighlight>
 +
 +
===mount失败===
 +
: 提问:
 +
:: mount失败出现命令提示
 +
<syntaxhighlight lang="bash">
 +
    # mount -t nfs -o nolock, vers=2 192.168.0.120:/work/nfs_root /mnt
 +
    BusyBox v1.7.0 (2008-01-22 10:04:09 EST) multi-call binary
 +
 +
    Usage: mount [flags] DEVICE NODE [-o options,more-options]
 +
 +
    Mount a filesystem. Filesystem autodetection requires /proc be mounted.
 +
 +
    Options:
 +
            -a              Mount all filesystems in fstab
 +
            -o option      One of many filesystem options, listed below
 +
            -r              Mount the filesystem read-only
 +
            -t fs-type      Specify the filesystem type
 +
            -w              Mount for reading and writing (default)...
 +
</syntaxhighlight>
 +
: 解答:
 +
:: 命令格式不对,nolock, 和 vers=2 中间不加空格:
 +
<syntaxhighlight lang="bash">
 +
    mount -t nfs -o nolock,vers=2 192.168.0.120:/work/nfs_root /mnt
 +
</syntaxhighlight>
 +
 +
===nfs启动出现问题,自己是跟着第11课视频操作的===
 +
<syntaxhighlight lang="bash">
 +
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
 +
</syntaxhighlight>
 +
: 参考:
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=16232&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=16232&highlight=NFS]
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=15529&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=15529&highlight=NFS]
 +
 +
===nfs中开发板与ubuntu不在同一个网段,为什么一使用nfs,开发板就变成192.168.1.17. ===
 +
: 参考:
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=15908&highlight=NFS  http://bbs.100ask.org/forum.php?mod=viewthread&tid=15908&highlight=NFS ]
 +
 +
===制作跟文件系统 挂载NFS失败===
 +
<syntaxhighlight lang="bash">
 +
VFS: Unable to mount root fs via NFS, trying floppy.
 +
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
 +
[<c0032ca8>] (unwind_backtrace+0x0/0xfc) from [<c0443678>] (dump_stack+0x18/0x1c)
 +
[<c0443678>] (dump_stack+0x18/0x1c) from [<c04436dc>] (panic+0x60/0x1ac)
 +
</syntaxhighlight>
 +
: 参考:
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=16151&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=16151&highlight=NFS]
 +
 +
===挂载NFS不能启动===
 +
<syntaxhighlight lang="bash">
 +
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
 +
</syntaxhighlight>
 +
: 参考:
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=16081&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=16081&highlight=NFS ]
 +
 +
===nfs: server 192.168.164.19 not responding, still trying===
 +
: 参考:
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=12783 http://bbs.100ask.org/forum.php?mod=viewthread&tid=12783]
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=10599&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=10599&highlight=NFS]
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=12149&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=12149&highlight=NFS]
 +
 +
===这里有nfs详解===
 +
: 参考:
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=14657&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=14657&highlight=NFS]
 +
 +
===采用板子上的nand中文件系统启动时,也不自动进入板子上的文件系统,必须在u-boot选项中选择“[r] Reboot u-boot”项才能正常启动。启动后也屏幕上也没有企鹅的标志。===
 +
: 参考:
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=15644&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=15644&highlight=NFS]
 +
 +
===nfs下载内核镜像到开发板出现错误,ERROR:Cannot mount===
 +
: 参考:
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=15677&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=15677&highlight=NFS]
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=15208&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=15208&highlight=NFS]
 +
 +
===NFS挂载老师系统的目录成功,挂载自己建立的则失败===
 +
: 参考:
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=15570&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=15570&highlight=NFS]
 +
 +
===mount: RPC: Unable to send; errno = Network is unreachable===
 +
: 参考:
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=15330&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=15330&highlight=NFS]
 +
 +
===用nfs启动内核后,开发板无法挂接网络根文件系统===
 +
: 参考:
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=15058&extra= http://bbs.100ask.org/forum.php?mod=viewthread&tid=15058&extra=]
 +
 +
===NFS手工MOUNT NFS失败===
 +
: 参考:
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=15164&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=15164&highlight=NFS]
 +
 +
===uboot使用nfs启动失败===
 +
<syntaxhighlight lang="bash">
 +
init started: BusyBox v1.7.0 (2008-01-22 10:04:09 EST)
 +
starting pid 765, tty '': '/etc/init.d/rcS'
 +
nfs: server 192.168.0.133 not responding, still trying
 +
</syntaxhighlight>
 +
: 参考:
 +
:: [http://bbs.100ask.org/forum.php?mod=viewthread&tid=11479&highlight=NFS http://bbs.100ask.org/forum.php?mod=viewthread&tid=11479&highlight=NFS]
 +
  
 
==EOP 疑问==
 
==EOP 疑问==
第157行: 第526行:
 
: '''{{redtext|提问:}}'''
 
: '''{{redtext|提问:}}'''
 
:: 之前的视频很流畅,仅 cmos 部分的视频很卡
 
:: 之前的视频很流畅,仅 cmos 部分的视频很卡
+
:
 
:: 换 [http://cn.haihaisoft.com/huplayer.aspx 这里] 的单显卡播放器 “海海软件 HUPlayer”。
 
:: 换 [http://cn.haihaisoft.com/huplayer.aspx 这里] 的单显卡播放器 “海海软件 HUPlayer”。
  

2019年12月7日 (六) 16:57的版本

目录

前言

页面说明

本页面集结了 百问科技论坛 常见的问题以及解答,是非常宝贵的知识宝库,在遇到问题时打开此文档使用浏览器搜索功能 Ctrl+f ,输入你遇到的问题的关键字,在此页面中都能找到前辈爬过的和你一样的「坑」~。
本页面持续更新ing,如果你有更好的意见或建议请联系我们,祝学习顺利!

如何解决学习过程中遇到的问题

出问题时,先查看命令有没有错(不要主观上认为自己没错,仔细检查几遍,看是否少了空格和冒号)。
如果是跟着视频操作的也出现错误(不要主观上觉得已经跟着视频操作,请回看视频,看步骤是否跟对了)。
如果以下问题没有解决你的问题,请在论坛www.100ask.org发帖,注意贴图说清问题。
如果你的问题和以下问题都不相似或者没有解决你的问题、在网上搜索也没有解决你的问题、在讨论群中也没能得到前辈的解答时,最后有两种方法确保你的疑问可以得到解答。
1.在论坛上发帖,老师晚上会看帖的,注意贴图详细描述清楚问题,还有用过什么方法仍然没有解决,在老师会贴解决后请回复解决带上你解决的方法,谢谢!
2.必要时 @ 我们在讨论群中驻守的答疑老师。

FAQ

Ubuntu的登录用户名和密码

我们提供的所有的Ubuntu的用户名和密码统一如下:
    用户名: book
    密码:   123456

为什么 Ubuntu 不能在 windows 通过 SSH 远程登录?

  1. 首先得让 ubuntu 与 window 之间互相 PING 通
  2. ubuntu 开启了 SSH 服务,使用我们的 ubuntu 9.10、ubuntu 16.04 都已开启 SSH

Ubuntu 16.04 登录密码是什么?

您好,只要是韦东山提供的 Ubuntu 系统,不管是 Ubuntu 9.10 或是 Ubuntu 16.04
它们用户名和密码都是: book ;123456
没有设置 root 密码,需要你通过命令 sudo passwd root 进行设置。

JZ2440 开发板触摸不灵敏

先尝试给 jz2440 开发板校准:打开开发板串口,系统启动后输入命令:
    $ rm /etc/pointercal
重启开发板,依次点击 LCD 出现的 5 个「十字架」。如果问题依旧,多半是硬件问题。请联系客服解决。

S3C2440 地址线寻址问题

提问:
S3C2440 总共有 27 根地址线,加上片选信号,总共可以寻址 1G 的空间。这 1G 空间的范围是 0x00000000-0x40000000 ,以上都容易理解。但是,韦老师书的第 88 页有一句话:。。。作为32位的CPU,可以使用的地址理论上可以达到 4G 。
问题1:这边 32 位的 CPU 指的是,S3C2440 可以有 32 位地址线,但实际只用了 27 根?
问题2:27 根地址线寻址范围是 0x00000000-0x40000000 , 88 页下面的功能部件的寄存器地址都超出这个范围了,存储控制器是 0x48000000 , CPU 是如何寻址的?
解答:
芯片的结构大概如此:
CPU---MMU----存储控制器-------网卡,内存,等等
CPU是32位的,意思是说它可以发出32位的地址给MMU,这从理论上当前就是有4G个地址。
CPU上运行的程序一般来说不可能用完所有的4G个地址,外面的MMU把CPU发出的地址映射到具体的设备上去

如何对 JZ2440 进行格式化?

进入 uboot 界面, 输入 nand scrub 回车,然后输入 y 回车

重新分区遇到问题

提问:
由于编译出来的内核大于2M 所以给开发板重新分区:在uboot中把2m(kernel) 改为了4m(kernel) ,系统起来的时候会卡住不动 如下:
    NAND read: device 0 offset 0x60000, size 0x400000

    Reading data from 0x45f800 -- 100% complete.
    4194304 bytes read: OK
    ## Booting image at 30007fc0 ...
    Image Name:   Linux-3.4.2
    Created:      2016-12-19  13:35:58 UTC
    Image Type:   ARM Linux Kernel Image (uncompressed)
    Data Size:    2129944 Bytes =  2 MB
    Load Address: 30008000
    Entry Point:  30008000
    Verifying Checksum ... OK
    XIP Kernel Image ... OK

    Starting kernel ...

    Uncompressing Linux... done, booting the kernel.
答:
    set bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200

为什么用Uboot 测试nandflash 读取不对

按照教程 UBOOT来读取nand flash 不对 我的开发板是V3.0版本的。 读取后 地址和数据都不对了?
Jz2440LearningFAQ 001.png
答:
问题的解决还是需要看源码,在cmd_mem.c中,对于md命令,它是通过simple_strtoul函数来转换地址的。
可以看以下的源码,当前缀为“0x”时,数据被当作16进制,而你的前缀是"0X",注意是大写。
所以你要么改为0x4E000010,要么省掉前缀,写为4E000010
    unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base)
    {
            unsigned long result = 0,value;

            if (*cp == '0') {
                    cp++;
                    if ((*cp == 'x') && isxdigit(cp[1])) {
                            base = 16;
                            cp++;
                    }
                    if (!base) {
                            base = 8;
                    }
            }
            if (!base) {
                    base = 10;
            }
            while (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : (islower(*cp)
                ? toupper(*cp) : *cp)-'A'+10) < base) {
                    result = result*base + value;
                    cp++;
            }
            if (endp)
                    *endp = (char *)cp;
            return result;
    }

有关函数与指针的问题

提问:
    (void (*) (unsigned long)) timer_expired;
这个语句是什么意思?
还有(void*)(unsigned long*)p 和 (void*)*(unsigned long*)p 有什么区别?
解答:
1.(void (*)(unsigned long))timer_expired;
一下子看不懂可以拆开来看,()timer_expired;表示强制类型转换,
void (*)(unsigned long)表示一个函数指针,形参为unsigned long型
整个语句就表示把timer_expired强制类型转换为指向函数的指针。
2.(void*)*(unsigned long*)p;
首先,(unsigned long*)p将p转换为指向unsigned long型的指针,然后前面加*取地址为p的unsigned long数据,即*(unsigned long*)p,之后,再将这个值转换为(void *)型的指针。
意思就是,在地址p,有个unsigned long类型的数据,该数据实际上是个地址,以上表达式的结果就是这个地址。
同理(void*)(unsigned long*)p;就可以自己理解了吧
想详细了解还要自己上网搜:这里 有个void指针(void *的用法)介绍。

ubuntu16.04汇编代码点亮led报错

提问:
按照韦老师的点灯源码,编译出错:
    led on.S:Assembler messages:
    led on.S:2:错误:invalid character(0xa3)in mnemonic 
    led_on.S:8:错误:no such instruction:1dr RO,=0x56000050'
    led_on.S:11:错误:expecting operand after',';got nothing 
    led_on.S:12:错误:invalid char'['beginning operand 2 '[RO]'
    led_on.S:14:错误:no such instruction:'1dr RO,=0x56000054'
    led_on.S:16:错误:expecting operand after',';got nothing 
    led_on.S:18:错误:invalid char'['beginning operand 2 '[RO]'
    led on.S:20:错误:no such instruction:'b MAIN LOOP'
答:
这种错误是因为用了错误的编译器导致的。
使用视频里的arm-linux-gcc 3.4.5来编译。所以我们严格严格严格建议新手用我们的ubuntu9.10,里面有装好编译器的!

摄像头不显示图像

不要用 xawtv ,跳过这节视频的实验,只看视频了解调用过程即可
我以前使用 xawtv 的目的是想让学员快速看到效果,后来发现 xawtv 不稳定、挑机器,反而浪费学员时间
后续章节的内容,完全覆盖 xawtv 的内容

insmod失败

提问:
insmod失败,出现Success (-1009029472)
    # insmod Ten_drv.ko
    insmod: cannot insert 'Ten_drv.ko': Success (-1009029472)
解答:
    insmod: cannot insert 'Ten_drv.ko': Success (-1009029472)
说明你的驱动程序是有问题的,查查 init 函数。

嵌入式Linux应用开发完全手册问题

提问:
按照 《嵌入式Linux应用开发完全手册》 移植内核,在jz2440测试时出现 kernel-panic...
解答:
首先,书是2008年写的,开发板是2011年出的。
2008年那会,开发板上的NAND都是64M,用的是yaffs1文件系统
现在的开发板,NAND都是128M甚至更大,用的是YAFFS2文件系统
所以,你应该看开发板使用手册,根据手册来打补丁、制作内核

Android中应用程序控制led驱动问题

提问:
android jni控制led视频中控制LED灯,我自己写了个LED linux内核驱动,可以通过我的C语言测试程序控制LED灯 ,用安卓java程序控制时,open系统自带的leds驱动时是对的 ,但是打开我自己写的驱动时失败,这是怎么回事呢? 驱动测试了可以控制LED灯,说明驱动没问题,java调用JNI也可以打印输出,说明JNI也没问题啊,这是什么问题呢?
    root@ tiny4412:~#./test 
    native ledOpen:3
    native ledCtrl:0,1,0
    native ledCtrl:1,1,0
    native ledCtrl:2,1,0
    native ledCtrl:3,1,0
    native ledCtrl:3,0,0
    native ledCtrl:2,0,0
    native ledCtrl:1,0,0
    native ledCtrl:0,0,0
    native ledClose...
    root@ tiny4412:~#
    01-0113:58:24.783 22171-22171/? I/art: Not late-enabling -Xcheck: jni(already on)
    01-0113:58:25.042 22171-22171/com thisway. app_0001_leddemo D/LEDDemo: native 1ed0pen:22
    01-0113:58:25.057 22171-22203/com thisway. app_0001_leddemo D/OpenGLRenderer: Render dirty regions requested: t...
    01-0113:58:25.062 22171-22171/com thisway. app_0001_leddemo D/Atlas: Validating map..
    01-0113:58:25.13422171-22203/com thi sway. app_0001_leddemo I/OpenGlRenderer: Initialized EGL, version 1.401-0113:58:25.13622171-22203/com thi sway. app_0001_1eddemo D/OpenGLRenderer: Enabling debug mode 0
解答:
看一下设备节点,确定它是属性是否正常。
这是权限问题;
我录JNI时忽略了这个问题,你看:
    device/friendly-arm/tiny4412/conf/init.tiny4412.rc:102:    chmod 0666 /dev/leds
这个文件里,它设置了属性。
你加上:
    chmod 0666 /dev/你的设备节点
然后重新 make
后面讲文件系统时,我再补充这个问题

调用数学函数就报错

提问:
程序如下:
rUBRDIV1=( (int)(pclk/16./baud+0.5) -1 ) 调用数学函数就报错:
    : undefined reference to `__divsi3'
    : undefined reference to `__divsi3'
    : undefined reference to `__floatsidf'
    : undefined reference to `__adddf3'
    : undefined reference to `__fixdfsi': 
    : undefined reference to `__divsi3'
    : undefined reference to `__floatsidf'
    : undefined reference to `__adddf3'
    : undefined reference to `__fixdfsi'
解答:
到工具链的目录下去搜libgcc.a,静态链接libgcc.a时要指定绝对路径


可以用eop/OPENJTAG调试内核吗?

可以下载、可以调;
下载到SDRAM之前,先要使用init.bin初始化SDRAM;ELF文件是vmlinux

mini2440做韦东山老师的项目兼容吗

第3期项目视频主要是应用程序,代码不用修改就可以使用任意运行LINUX的板子上,不管是S3C2440, s3c6410等都可以。
无论什么板子,原理是相通的,只是寄存器操作/启动方式有区别

怎么打断JZ2440上电后的自启动

重启单板, 在bootdelay时间内按空格。

专题答疑

NANDFLASH 疑问

NAND 坏块疑问

提问:
1.nand 的坏块是不是出厂的时候很难避免,厂家在出厂的时候标记好后,在 nand 中读写数据会自动避开坏块,如果擦除坏块标记,可能会带来数据完整性的问题吗?
2.这样做出来产品会不会带来稳定性问题?
3.如果一旦擦除坏块的标记,能恢复吗?怎么恢复?
Jz2440LearningFAQ 002.png
解答:
1.出厂时,对于坏块会标记,我们使用过程中如果发现坏了也要自己标记
2.没有“自动避开”,驱动程序中要擦除、读、写前,先判断该 BLOCK 是否正常,如果是“坏的”,那就避开
3.NAND FLASH 一般用来保存视频等海量数据,就是因为它不可靠,不能用来保存程序等关键性数据,这些关键数据用 NOR FLASH 来保存但是对于廉价电子产品、消费电子产品,一般直接使用 NAND :一是现在的工艺已经挺可靠,出现坏块的可能性降低;二是消费类电子产品,坏就坏了,坏了就修
4.一旦擦除坏块标记,能恢复吗?这问题我没找到相关资料,根据经常,坏块是无法擦除的。即:坏块的标记是无法简单擦除的; UBOOT 里有一个 nand scrub 命令,它就是强制擦除整个芯片的;但是执行 nand scrub 后再执行 nand bad 还是可以查出原先的坏块

NAND FLASH 初始化?

提问:
如果使用 NAND 方式启动开发板,在教程中韦老师说硬件会把 Nand 的 4K 内容拷贝到 SRAM 里,但是这个时候 Nand 都没有初始化,为什么能从 Nand 的前 4K 拷贝内容?
解答:
1.nand 不需要初始化,要初始化的是 nand 控制器
2.SROM 的程序(我们看不见),会使用最安全的参数来初始化 nand 控制器,然后去读前 4K 到片内内存
提问:
不同页大小的 NAND 的读操作是不一样的,SROM 怎么分辨?
解答:
NAND 不同时,电路板上要设置配置引脚为高电平或低电平,比如 NCON 引脚。

NORFLASH 疑问

mini2440 nand启动的情况下,能不能访问nor flash

NAND启动,不能访问NOR。

NORFLASH 初始化疑问

提问:
请问下裸机加强版 norflash 的初始化在哪里啊?看视频好像直接就读写了
解答:
1.访问 NOR 时,本来也应该先设置时序;但是可以使用默认的时序。内存控制器内部对于 CS0 的时序,设置得非常保守,可以用于一切 NOR FLASH
2.NOR 可以像内存一样直接读,但是不能直接写
3.视频中,有讲解怎么去设置 NOR 的时序让它的访问更快一点

内存控制器疑问

提问:
老师 你好 之前你的课程有提到过内存控制器负责挑数据 那么怎么挑的呢?
解答:
比如 CPU 想访问地址 0x30000001 的 1 字节数据,而 SDRAM 的位宽是 32 位,那么内存控制器会返回这 4 个地址上的 4 个字节数据: 0x30000000,0x30000001,0x30000002,0x30000003 。那显然,内存控制器会把第 2 个数据即地址 0x30000001 对应的数据返回给 CPU 。

编译器疑问

提问:
1.arm 交叉编译器各版本的兼容性,如使用 3.4.5 编译的动态链接库,可否用 4.4 编译应用程序,并成功调用动态库?
2.拿到一个陌生的 arm 版,如何从 arm 板上获取编译器版本,(原 PC 端开发信息丢失)?
解答:
问题1:
我们首先要弄清楚指令集的概念:
JZ2440 使用 arm9 核,该 CPU 核使用的指令集是 armv4;
所谓指令集,指的是汇编指令的版本;比如 cortex a7 等更先进的 CPU 核它支持某些新的指令,而 ARM9 不支持这些指令。
你使用比较新的编译器时,它默认支持的指令集一般就不是 armv4 了;
如果不进行特别指定,编译出来的 BIN 文件烧在 JZ2440 上是无法运行的:因为 CPU 不认得某些新指令,无法执行某些新指令。
一般来说,新的编译器会兼容老的芯片,但是需要告诉编译器,让它使用老的指令集来编译程序。
所以,你当然可以使用 4.4 的工具链来编译 jz2440 程序,需要做的是:指定它,使用 armv4 指令集。
方法如下:
使用 3.4.5 工具链时,我们这样编译:arm-linux-gcc -c -o led.o led.c // 默认使用 armv4
使用 4.4 等工具链时,这样编译:arm-linux-gcc -march=armv4 -c -o led.o led.c // 默认不是 armv4 ,需要手工指定
问题2:
相信你已经知道答案了,
首先要确定你的 CPU 核使用哪些指令集,
是否支持软件浮点,
你想使用 glibc 还是 uclibc ,
然后根据这些特性去找对应的编译器。
注意: uclibc 是 glibc 的简化版本,不过现在嵌入式的存储空间足够大了,基本不使用 uclibc 了。

NFS问题

遇到问题时,请先参考 [VMwareAndUbuntuNetworkSetupGuide | 这里] 确保 ping 无问题;再参考 这里 确保 NFS 配置无问题。

NFS启动注意要点是?

  1. 确保开发板能ping通虚拟机Linux
  2. 确保开发板uboot参数中指定的文件系统路径在虚拟机Linux中确实存在
  3. 确保开发板uboot参数中指定的IP是虚拟机Linux的IP,NFS文件系统中192.168.1.120:/work/nfs_root/first_fs/etc/init.d/rcS文件中如果有设置IP的命令,必须设置与虚拟机在同一网段
  4. 确保虚拟机Linux安装并启动了NFS服务
  5. 确保开发板有挂载网络文件系统路径的权限,即所用的文件系统所在目录必须在/etc/exports中声明,否则无权挂载
  6. 确保网络文件系统是正确的(可以先用光盘提供的网络文件系统测试)
  7. 编译内核所用的交叉编译器与制作文件系统所用的交叉编译器版本相同

nfs服务器设置出现问题

提问:
第11课第4节 构建根文件系统之构建根文件系统:这个视频跟着韦老师的操作,前面都没有出现什么问题,手动配置nfs服务器也是正常的,但是设置从nfs服务器启动的时候却出了问题:
    Root-NFS: Unable to get nfsd port number from server, using default
    Looking up port of RPC 100005/1 on 200.200.1.93
    rpcbind: server 200.200.1.93 not responding, timed out
    Root-NFS: Unable to get mountd port number from server, using default
    mount: server 200.200.1.93 not responding, timed out
    Root-NFS: Server returned error -5 while mounting /work/nfs_root/first_fs
    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:
    1f00        256 mtdblock0 (driver?)
    1f01        128 mtdblock1 (driver?)
    1f02       2048 mtdblock2 (driver?)
    1f03     259712 mtdblock3 (driver?)
    Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
看它报错的信息,好像是主机没回应,导致从主机上启动文件系统失败,但是我从设置 nfs 启动之前,开发板、虚拟机、电脑三者一直都能够 ping 的通的呀,能否看看问题是出在哪里呢?
解答:
请先参考 [VMwareAndUbuntuNetworkSetupGuide | 这里] 确保 ping 无问题;再参考 这里 确保 NFS 配置无问题;
虚拟机提供的网络文件系统中的 /work/nfs_roots/xxx/etc/init.d/rcS 有一句修改开发板ip的指令,写死开发板的ip即可:
    ifconfig eth0 192.168.1.17

使用NFS作为根文件系统来启动遇到的问题

提问:
目前在学习"学前班第0课第七节",开发板就是 jz2440V2,跟着视频做到了使用NFS作为根文件系统启动,输入保存一切都正常,重启开发板后发现启动不了,串口输出如图所示。我的开发板 IP 是192.168.1.17,虚拟机的 IP 是 192.168.1.20

从图中我能看懂的是 192.168.1.20 没有回应,是不是意味着开发板和虚拟机很可能是不通的?按照这个思路,虚拟机 ping 开发板,果然是不通的。接下来我是不是要输入什么指令使得开发板回到NFS作为根文件启动之前的状态,我该怎么做呢?另外从串口输出看还有木有别的什么问题?

Jz2440LearningFAQ 003.png
解答:
请先参考 [VMwareAndUbuntuNetworkSetupGuide | 这里] 确保 ping 无问题;再参考 这里 确保 NFS 配置无问题。
现在开发板没有启动,在虚拟机中去PING它并不能说明任何问题。
1.使用FALSH根文件系统启动开发板,再在开发板中配置IP后去PING虚拟机,确保能PING通
使用FALSH启动的方法是,进入UBOOT,执行:
    set bootargs root=/dev/mtdblock3 console=ttySAC0,115200
    save
    reset
2.PING通之后,再执行以下命令MOUNT NFS:
    mount -t nfs -o nolock,vers=2 192.168.1.20:/work/nfs_root /mnt
成功的话,再去设置UBOOT的bootargs,使用NFS根文件系统;
3.
    OpenJTAG> nfs 30000000 192.168.1.105:/work/nfs_root/tmp/fs.yaffs2
    dm9000 i/o: 0x20000000, id: 0x90000a46 
    DM9000: running in 16 bit mode
    MAC: 08:00:3e:26:0a:5b
    could not establish link
    File transfer via NFS from server 192.168.1.105; our IP address is 192.168.7.17
    Filename '/work/nfs_root/tmp/fs.yaffs2'.

mount失败

提问:
mount失败出现命令提示
    # mount -t nfs -o nolock, vers=2 192.168.0.120:/work/nfs_root /mnt
    BusyBox v1.7.0 (2008-01-22 10:04:09 EST) multi-call binary

    Usage: mount [flags] DEVICE NODE [-o options,more-options]

    Mount a filesystem. Filesystem autodetection requires /proc be mounted.

    Options:
            -a              Mount all filesystems in fstab
            -o option       One of many filesystem options, listed below
            -r              Mount the filesystem read-only
            -t fs-type      Specify the filesystem type
            -w              Mount for reading and writing (default)...
解答:
命令格式不对,nolock, 和 vers=2 中间不加空格:
    mount -t nfs -o nolock,vers=2 192.168.0.120:/work/nfs_root /mnt

nfs启动出现问题,自己是跟着第11课视频操作的

	Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
参考:
http://bbs.100ask.org/forum.php?mod=viewthread&tid=16232&highlight=NFS
http://bbs.100ask.org/forum.php?mod=viewthread&tid=15529&highlight=NFS

nfs中开发板与ubuntu不在同一个网段,为什么一使用nfs,开发板就变成192.168.1.17.

参考:
http://bbs.100ask.org/forum.php?mod=viewthread&tid=15908&highlight=NFS

制作跟文件系统 挂载NFS失败

	VFS: Unable to mount root fs via NFS, trying floppy.
	Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
	[<c0032ca8>] (unwind_backtrace+0x0/0xfc) from [<c0443678>] (dump_stack+0x18/0x1c)
	[<c0443678>] (dump_stack+0x18/0x1c) from [<c04436dc>] (panic+0x60/0x1ac)
参考:
http://bbs.100ask.org/forum.php?mod=viewthread&tid=16151&highlight=NFS

挂载NFS不能启动

	Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
参考:
http://bbs.100ask.org/forum.php?mod=viewthread&tid=16081&highlight=NFS

采用板子上的nand中文件系统启动时,也不自动进入板子上的文件系统,必须在u-boot选项中选择“[r] Reboot u-boot”项才能正常启动。启动后也屏幕上也没有企鹅的标志。

参考:
http://bbs.100ask.org/forum.php?mod=viewthread&tid=15644&highlight=NFS

NFS挂载老师系统的目录成功,挂载自己建立的则失败

参考:
http://bbs.100ask.org/forum.php?mod=viewthread&tid=15570&highlight=NFS

mount: RPC: Unable to send; errno = Network is unreachable

参考:
http://bbs.100ask.org/forum.php?mod=viewthread&tid=15330&highlight=NFS

用nfs启动内核后,开发板无法挂接网络根文件系统

参考:
http://bbs.100ask.org/forum.php?mod=viewthread&tid=15058&extra=

uboot使用nfs启动失败

	init started: BusyBox v1.7.0 (2008-01-22 10:04:09 EST)
	starting pid 765, tty '': '/etc/init.d/rcS'
	nfs: server 192.168.0.133 not responding, still trying
参考:
http://bbs.100ask.org/forum.php?mod=viewthread&tid=11479&highlight=NFS


EOP 疑问

EPO 测试方法

1. EOP 通过 USB 线接到电脑上,EOP通过JTAG排线接到开发板上
2. 开发板上电、断电,反复操作;同时观察EOP上的灯,看看灯有没有亮、灭;
如果 EOP 的灯没变化,表示 JTAG 排线有问题
3. 开发板上电,运行 oflash ,观察打印出来的 CPUID
如果 CPUID 是0,一般表示开发板没上电
如果 CPUID 是 0xffffffff ,那么把开发板上电时执行一次 oflash、开发板断电时再执行一次 oflash:观察 CPUID 有无变化
4. 经过上述操作,oflash 还是未能识别出开发板,一般来说就是 JTAG 线坏了、EOP 坏了、开发板坏了

EOP 支持调试模式吗?

解答:
不支持, 我们 EOP 用的是 JTAG 协议,但不支持 SWD 调试模式
参考,JTAG 和 SWD 的区别

加密视频播放器问题

换系统或换电脑后还能看视频吗?

答:
可以,换设备、系统需要解绑用接收密码的邮箱发邮件到 weidongshan@qq.com
邮件格式如下:
    标题:视频用户名是xxx + 解绑
工作日 24 小时内,工作人员回复邮件后,便可以继续看视频。

cmos 部分的视频很卡

提问:
之前的视频很流畅,仅 cmos 部分的视频很卡
这里 的单显卡播放器 “海海软件 HUPlayer”。

windows xp 系统播放视频有声音无图像

需要关闭硬件加速 具体步骤:

    桌面空白处点右键,“属性”->“设置”->“高级”->“疑难问题”->把“硬件加速”的滑动块拉到最左边

windows XP 系统播放视频异常停止

我们的Wiki 获取下载双显卡播放器的链接,具体路径在:

    003_韦东山加密视频播放器_播放问题解决方法->韦东山加密视频播放器.rar

播放器异常停止

这个问题一般出现在 windows 7、windows 10中
解决方法在播放器中点击:
    huplayer菜单 -> 选项 -> Tweaks -> Delete All License in your PC
然后发邮件找我们解绑后再登陆

无法打开播放器

提问:
无法打开播放器,弹出错误 “此程序无法显示网页” 。
解答:
参考 这里 的第 3 点:三、设置 IE 浏览器代理服务器 设置 IE 代理服务器。

MAC电脑播放视频不清晰

正常现象,因为视频文件分辨率不符合MAC, 请换到Windows观看。

时间久了加密视频播放不了

提问:
我电脑没换系统和硬盘内存,为什么 2 个月后就不能看了?
解答:
可能是系统自动升级,或者下载安装了补丁(比如杀毒软件经常提示安装xxx补丁)都会导致验证码失效,进行解绑操作即可正常观看。

使用手机看视频?

1.下载 "海海软件 HUPlayer For Android 或 iOS" 播放器
下载地址:[www.drm-x.com www.drm-x.com]
免费下载->下载海海软件 HUPlayer,选择相应的手机播放器
2.把视频导入到手机,使用播放器打开视频输入用户名和密码
3.如果弹出"本账号只绑定一台电脑观看",则联系 weidongshan@qq.com 解绑附上你的视频用户名
4.我们不能保证手机正常观看,因为播放器不太稳定,不过我们保证 Windows 能正常观看。


新1期视频与旧1期的区别

旧1期是 2010 年开始录,那时主要帮朋友推销开发板,没想要进入培训行业,
2017 年 9 月重录第 1 期裸板视频,命名为新1期。
为什么要重录?因为很多同学反馈说没有 Linux 操作经验、没有单片机基础很难看懂旧1期,
因为录老视频时,本意是配合我写的《嵌入式LINUX应用开发完全手册》一起学习,并没有面向 0 基础的同学。
新 1 期主要特点:
1.比旧1期详细80%,对旧 1 期的易错点,难点重点剖析,
2.适合人群:没有 LINUX 操作经验的、没有单片机基础的、没有硬件知识的,
3.只要求你会简单的 C 语言,计算机基础和数电基础;
4.所有代码现场编写、现场调试,绝对不会拿现成代码给你分析。
5.新开发环境,开发更便捷高效

你们的售后方式是怎样的?

1.使用 [ http://wiki.100ask.org/Mainpage wiki 主页] 的资料可解决用户在学习过程中的大部分问题。
2.使用 论坛 答疑:论坛成立10多年以来,沉淀了很多有价值的问答。论坛地址:
3.依然解决不了你的问题可以发帖,请按照 发帖指南 进行提问。帖子越详细,被翻牌解决的概率越大。
4.加入微信/QQ 交流群,必要时可得到一对一的指导。