发 帖  
[问答] uboot从SD卡启动内核运行了但是运行程序出问题了
2523 BeagleBone
分享
  我想要在SD中来启动Linux内核,我用的板子是beaglebone black的系统是自带的Debian 。我是这么做的,先把SD卡分了两个分区一个FAT分区一个EXT4分区,然后我从网上下载了一个uboot源码编译好后我将MLO、uboot.img文件放在了FAT分区里,然后我从beaglebone black 上挂载mmcblk0p2,将这个分区里的文件全部拷贝到我的SD卡的EXT4分区里。
   这些都弄好后,将SD卡插入板子。上电按下boot按键,接着系统正常从SD卡启动了,我也可以正常的登陆进去,然后我将之前搞好的LCD显示程序拷贝过来运行发现程序运行了但是LCD没有反应,但是SPI设备树文件我都配置了,并且/dev下也可以找到spidev1这个设备文件。但是就是没有显示,关键是这个程序我之前在从emmc启动的情况下可以正常的显示,我就搞不懂为什么我在SD里运行就不行呢?是哪里出了问题啊?

  谁给我解决解决呀,我刚弄这个不是很懂。图片是我运行程序时的信息,没有报错。但是就是LCD没显示。
0
lcd_spi.png
lcd_spi.png
已退回20积分
2018-1-20 23:24:48   评论 邀请回答
6个回答
大神帮帮忙呀

补充内容 (2018-1-22 15:31):
这几天检查发现SPI DTS文件没有挂载成功,内核错误提示“pinctrl-single 44e10800.pinmux: pin 44e10990 already requested by 48038000.mcasp; cannot claim for 481a0000.spi” 但是为什么会复用不了这个引脚呢?
关键是这个设备树文件我之前使用都是正常的呀

补充内容 (2018-1-22 15:36):
slots :
4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
7: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-SPI1-01 //有这个设备只是没用

引脚配置情况:
pin 100 (44e10990) 00000000 pinctrl-single
pin 101 (44e10994) 00000010 pinctrl-single
pin 102 (44e10998) 00000027 pinctrl-single
pin 103 (44e1099c) 00000002 pinctrl-single
这个引脚复用有问题,没有配置为SPI1.

不知道为什么没有配置成功?

我的设备树文件写的对的呀!
fragment@0 {
        target = <&am33xx_pinmux>;
        __overlay__ {
            spi1_pins_s0: spi1_pins_s0 {
                        pinctrl-single,pins = <
                                0x190 0x33      /* mcasp0_aclkx.spi1_sclk, INPUT
_PULLUP | MODE0 */
                                0x194 0x33      /* mcasp0_fsx.spi1_d0, INPUT_PUL
LUP | MODE0 */
                                0x198 0x13      /* mcasp0_axr0.spi1_d1, OUTPUT_P
ULLUP | MODE0 */
                                0x19c 0x13      /* mcasp0_ahclkr.spi1_cs0, OUTPU
T_PULLUP | MODE0 */
                >;
            };
        };
    };

解决问题了,内核正常启动时会将HDMIN这个cape使能,这样就不会占用SPI的IO口然后就可以正常复用了内核启动的环境配置文件uEnv.txt中将这一句“capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN”加上就可以了。内核确实太复杂了,搞不清楚整个过程出了问题都不知道怎么去找,这次是我反复分析从uboot->内核启动整个过程串口终端打印的一些信息中发现的。
                        
                    
1)下载linux到系统的SDRAM运行(仅做测试之用,断电或退出后就会消失)

1>运行Uboot,设置环境变量

Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360
console=ttyS0,115200,mem=32M 启动系统环境变量
Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址
Uboot>setenv ipaddr [目标板 ip 地址] 目标板 ip 地址
Uboot>setenv serverip [主机 ip 地址] 主机 ip 地址

2>下载linux内核,文件系统
打开tftpserver应用程序,设置根目录路径,将内核、文件系统等拷贝到所设置的根目录下。

Uboot>tftp 21100000 ramdisk.gz 下载文件系统
Uboot>tftp 21000000 uImage 下载 linux 内核
Uboot>bootm 21000000 启动 linux
然后linux操作系统就开始运行。

2)烧写 Linux 到系统的 Flash 运行

1>设置运行Linux的环境变量

Uboot> setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 console=ttyS0,115200,mem=32M 启动系统环境变量
Uboot>setenv image cp.b 10020000 21000000 b0000 拷贝内核到sdram
Uboot>setenv ramdisk cp.b 100d0000 21100000 226000 拷贝文件系统到sdram
Uboot>setenv boot bootm 设置变量boot
Uboot>setenv bootcmd run ramdisk\;run image\;run boot 设置默认变量bootcmd
Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址
Uboot>setenv ipaddr 目标板 ip 地址 目标板 ip 地址,由你自己决定
Uboot>setenv serverip 主机ip地址 主机ip地址,就是你的PC的ip
Uboot>saveenv 保存环境变量

2>烧写Linux内核到Flash

Uboot>tftp 21100000 ramdisk.gz
Uboot>cp.b 21100000 100d0000 226000
Uboot>tftp 21000000 uImage
Uboot>cp.b 21000000 10020000 b0000
reset之linux操作系统就开始运行。
2018-3-10 10:56:22 评论

举报

头像被屏蔽

只有小组成员才能发言,加入小组>>

82个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表