am335x开发板,u-boot,uImage放在nand上,启动nfs文件系统

  首先配置虚拟机的nfs服务器,网上一大堆,基本都可以正常使用。配置好之后,使用下面命令测试一下:
mount -o nolock -t nfs 192.168.1.220:/usr/local/ti-sdk-am335x-evm/targetNFS   /mnt
如果成功,说明nfs正常。就可以执行下面步骤。

  配置bootargs启动参数,这个是关键,在am335x-evm.h文件中有默认CONFIG_EXTRA_ENV_SETTINGS环境变量设置,这是里面都是通用(常用)的设置,1,mmc   2 nand    3net
而我用的比比较特殊,我使用nand启动 u-boot、uImage (kernel),只有文件系统使用nfs,因此不能直接使用通过的环境变量,修改如下 :
修改前:    
        "rootpath=/export/rootfs\0" \
        "nandargs=setenv bootargs console=${console} " \
        "${optargs} " \
        "root=${nandroot} " \
        "rootfstype=${nandrootfstype}\0" \
修改后:    
        "rootpath=/usr/local/ti-sdk-am335x-evm/targetNFS\0" \
        "nandargs=setenv bootargs console=${console} " \
        "${optargs} " \
        "root=/dev/nfs " \
        "nfsroot=${serverip}:${rootpath},${nfsopts} rw " \
        "ip=192.168.0.6:192.168.0.220:192.168.0.1:255.255.255.0::eth0:off\0" \
改完之后重新编译uboot,下载到nand中,重启板子,走到加载文件系统时,系统提示,
    没有指定服务器地址, 然后继续从nand启动,失败。
检查了半天,我在uboot中增加下面命令,并保存
setenv serverip 192.168.0.220
saveenv

(后来发现,这u-boot中的这个配置不用编译生成,可以在u-boot命令行中设置也行,反正都是保存在env区域 )


  重启后,板子可以挂载虚拟机的nfs文件系统,但是出现很多错误,
Permission denied
这些错误一般都是am335x没有权限写、执行nfs中的文件导致的,因此需要在虚拟机中执行下面操作来解决
chmod -R 777 /usr/local/ti-sdk-am335x-evm/targetNFS/*
重启nfs服务,TI 提供的SDK中启动nfs 服务是这样操作的,
sudo /etc/init.d/nfs-kernel-server stop
sudo /etc/init.d/nfs-kernel-server start
重启am3355x板子,又发现新问题。

  启动NFS后出现错误: request_module: runaway loop modprobe binfmt-0000
经baidu一下,可能是nfs文件系统有问题,因为这个targetNFS是虚拟机本来就建好的,我猜想可能有问题。
执行安装目录下bin/setup-targetfs-nfs.sh文件,重新生成targetNFS目录,
重启板子,运行正常。
但串口不能使用,只能通过telnet登录,用户名root,没有密码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AM335X开发板主要是基于TI公司的AM335x处理器,所以我们可以使用TI公司提供的PMIC(Power Management IC)芯片来获取电池电量,并通过QT程序来显示。 下面是一些参考步骤: 1. 首先,需要通过I2C总线与PMIC芯片通信。可以使用QT提供的QI2C类来实现。 2. 通过I2C总线读取PMIC芯片的寄存器,可以得到电池电量的值。 3. 使用QT提供的QLabel控件来显示电池电量的值。 下面是一个简单的示例代码: ```c++ #include <QLabel> #include <QTimer> #include <QI2C> #include <QDebug> #define PMIC_I2C_ADDRESS 0x2D class BatteryMonitor : public QWidget { Q_OBJECT public: BatteryMonitor(QWidget *parent = nullptr) : QWidget(parent) , m_batteryLevelLabel(new QLabel(this)) , m_i2c(new QI2C(this)) { // 设置I2C总线的地址和频率 m_i2c->setDevice("/dev/i2c-1"); m_i2c->setAddress(PMIC_I2C_ADDRESS); m_i2c->setFrequency(QI2C::Frequency::StandardMode); // 每隔1秒更新一次电池电量 QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout, this, &BatteryMonitor::updateBatteryLevel); timer->start(1000); // 设置电池电量标签的样式 m_batteryLevelLabel->setAlignment(Qt::AlignCenter); m_batteryLevelLabel->setStyleSheet("font-size: 24px; font-weight: bold;"); m_batteryLevelLabel->setFixedSize(100, 50); // 布局 QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(m_batteryLevelLabel); } private slots: void updateBatteryLevel() { QByteArray readData; if (m_i2c->read(0x0B, 1, &readData) == -1) { qWarning() << "Failed to read PMIC register!"; return; } int batteryLevel = readData.at(0); if (batteryLevel < 10) { m_batteryLevelLabel->setStyleSheet("color: red;"); } else { m_batteryLevelLabel->setStyleSheet(""); } m_batteryLevelLabel->setText(QString("%1%").arg(batteryLevel)); } private: QLabel *m_batteryLevelLabel; QI2C *m_i2c; }; ``` 在上面的代码中,我们使用了QI2C类来读取PMIC芯片的寄存器,获取电池电量的值。并使用QLabel控件来显示电池电量的值。在每隔1秒的定时器事件中,我们会更新电池电量的值,并根据电池电量的值来改变电池电量标签的颜色。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值