找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 365|回复: 2

新世界Uboot启动系统时WiFi模块无法使用的解答

[复制链接]

1

主题

1

回帖

23

积分

新手上路

积分
23
发表于 2024-9-19 22:46:24 | 显示全部楼层 |阅读模式
本帖最后由 RigoLigo 于 2024-9-20 18:06 编辑

这个问题是前几天群友提出来的,具体的环境是新世界Uboot+旧世界LoongOS(当时还没有另一个大佬移植的新世界AIC8800驱动,所以WiFi是用旧世界系统测试的)当时以为SDIO1驱动有问题(Uboot设备树是没初始化SDIO1的),后来发现TF版在进系统后能识别TF卡,证明SDIO这部分并没有问题。

从原理图上可以看到(2K0300_99PAI_V1.1_0531  第8页),WiFi模块的12脚连接到一个叫WLAN_EN的网络,连接到的是2K0300的TIM1_CH1引脚,查阅2K0300手册可知这个脚是GPIO81。由于手头没有万用表,用DSLogic逻辑分析仪探测,这个引脚确实是低电平。在Linux中使用GPIO功能可以激活这个引脚,但重启后会复位到低电平。

由于Linux中似乎并没有给MMC
子系统留有片选IO口的能力,需要自己改一下内核源码。
  1. // 文件:(旧世界内核)drivers/mmc/host/ls2kmci.c

  2. // 需要添加这个头文件
  3. #include <linux/of_gpio.h>

  4. static int ls2k_mci_probe(struct platform_device *pdev)
  5. {
  6.     // 省略……
  7.     hotpug_host = host;
  8.     local_irq_save(flags);
  9.     if (request_irq(host->irq, ls2k_mci_irq, 0, DRIVER_NAME, host)) {
  10.         dev_err(&pdev->dev, "failed to request mci interrupt.\n");
  11.         ret = -ENOENT;
  12.         goto probe_iounmap;
  13.     }
  14.     // 以下是加入的代码
  15.     host->cs_gpio = of_get_named_gpio(pdev->dev.of_node, "cs-gpios", 0);
  16.     if (gpio_is_valid(host->cs_gpio)) {
  17.         gpio_direction_output(host->cs_gpio, 1);
  18.         printk("%s: Toggled CS GPIO = 1 for %s\n", __func__, mmc_hostname(mmc));
  19.     } else {
  20.         printk("%s: Cannot get CS GPIO for %s\n", __func__, mmc_hostname(mmc));
  21.     }
  22.     // 以上是加入的代码
复制代码
上面这个基本就是让龙芯MMC驱动能读取一个cs-gpios属性来得到一个用于片选的GPIO引脚;当然应该还要判断是否存在这个属性,不过只是测试用途就没有写,欢迎各位继续折腾。

设备树里相应添加一个:
  1. // 文件:(旧世界内核)arch/loongarch/boot/dts/loongson/loongson_2k0300_pai_99_wifi.dts

  2. &sdio1{
  3.     status = "okay";
  4.     pinctrl-names = "default";
  5.     pinctrl-0 = <&sdio1_6bit>;
  6.     cs-gpios = <&gpa5 1 GPIO_ACTIVE_HIGH>;
  7. };
复制代码
重点就是加的cs-gpios那一行,我也没怎么玩过DTS,这个只能说是能用。改完之后编译内核启动应该就能加载WiFi驱动了,WiFi模块下面那个电阻应该能测到高电平。





3

主题

6

回帖

61

积分

注册会员

积分
61
发表于 2024-9-20 11:57:34 | 显示全部楼层
你是在改新世界的内核?还是旧世界的内核?标题好像是新世界,代码注释又是旧世界。有点晕。
在新世界内核中按上述方法改了代码,但编译过不了。找不到函数of_get_named_gpio

我的板子是wifi版2k300久久派v1.1,涮了新世界后就没有wifi了,不知怎样才能找回来。
有线lan是有的,但名称很怪 end0,当然可以改成熟悉的eth0。
挂载nfs时,必须加前缀busybox,从这一点说不如旧世界。

1

主题

1

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2024-9-20 18:04:40 | 显示全部楼层
zliu2007 发表于 2024-9-20 11:57
你是在改新世界的内核?还是旧世界的内核?标题好像是新世界,代码注释又是旧世界。有点晕。
在新世界内核 ...

使用新世界Uboot启动旧世界LoongOS,内核是旧的,固件是新的(这个也是群友最开始提出的问题,至于怎么启动,是使用新世界uboot的bootelf命令启动vmlinuz)

至于找不到的函数确实是我疏忽,忘了自己加了一个头文件:#include <linux/of_gpio.h>。可以试下加上再编译。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Discuz! X

GMT+8, 2024-11-21 21:36 , Processed in 0.082507 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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