royalroot Posted January 4, 2023 Posted January 4, 2023 (edited) Hello, I'm trying to install the zfs-dkms package with the latest build (Armbian_23.02.0-trunk.0127_Orangepi5_jammy_legacy_5.10.110_xfce_desktop.img.xz) and I get the following error: configure: error: *** This kernel does not include the required loadable module *** support! *** *** To build OpenZFS as a loadable Linux kernel module *** enable loadable module support by setting *** `CONFIG_MODULES=y` in the kernel configuration and run *** `make modules_prepare` in the Linux source tree. *** *** If you don't intend to enable loadable kernel module *** support, please compile OpenZFS as a Linux kernel built-in. *** *** Prepare the Linux source tree by running `make prepare`, *** use the OpenZFS `--enable-linux-builtin` configure option, *** copy the OpenZFS sources into the Linux source tree using *** `./copy-builtin <linux source directory>`, *** set `CONFIG_ZFS=y` in the kernel configuration and compile *** kernel as usual. The strange thing is, that `CONFIG_MODULES` is enabled: orangepi5:~:# grep -i config_modules /usr/src/linux-headers-5.10.110-rockchip-rk3588/.config CONFIG_MODULES_USE_ELF_RELA=y CONFIG_MODULES=y CONFIG_MODULES_TREE_LOOKUP=y Does anyone know what I'm doing wrong? Thanx, Nico Edited January 4, 2023 by royalroot 0 Quote
Julio Posted January 26, 2023 Posted January 26, 2023 Same problem here. Still present in the latest armbian images with OrangePi5 officially supported. 0 Quote
Marco Schirrmeister Posted February 27, 2023 Posted February 27, 2023 (edited) Confirmed. Issue still present in 23.02 release. root@sperber ~ [100]# cat /var/lib/dkms/zfs/2.1.6/build/build/build.log make: Entering directory '/usr/src/linux-headers-5.10.110-rockchip-rk3588' arch/arm64/Makefile:44: Detected assembler with broken .inst; disassembly will be unreliable /usr/bin/env: 'python2': No such file or directory MODPOST /var/lib/dkms/zfs/2.1.6/build/build/Module.symvers /bin/sh: 1: scripts/mod/modpost: not found make[1]: *** [scripts/Makefile.modpost:169: /var/lib/dkms/zfs/2.1.6/build/build/Module.symvers] Error 127 make[1]: Target '__modpost' not remade because of errors. make: *** [Makefile:1822: modules] Error 2 make: Leaving directory '/usr/src/linux-headers-5.10.110-rockchip-rk3588' Edited February 27, 2023 by Marco Schirrmeister 0 Quote
zchrish Posted March 1, 2023 Posted March 1, 2023 Any update; I downloaded the latest Ubuntu and Armbian images and install zfs still won't modprobe with the same issueAny update; I downloaded the latest Ubuntu and Armbian images and install zfs still won't modprobe with the same issue 0 Quote
Werner Posted March 1, 2023 Posted March 1, 2023 It will most likely be mentioned in changelog once this is fixed. 0 Quote
nekozaki Posted March 25, 2023 Posted March 25, 2023 This is a temporary fix, but I can build it by adding the missing files and generating the files needed to build the module, as shown in the link. The command I ran is below. cd /usr/src/linux-headers-5.10.110-rockchip-rk3588 wget https://raw.githubusercontent.com/torvalds/linux/v5.10/arch/arm64/kernel/vdso/vdso.lds.S -P arch/arm64/kernel/vdso wget https://raw.githubusercontent.com/torvalds/linux/v5.10/arch/arm64/kernel/vdso/vgettimeofday.c -P arch/arm64/kernel/vdso wget https://raw.githubusercontent.com/torvalds/linux/v5.10/lib/vdso/gettimeofday.c -P lib/vdso wget https://raw.githubusercontent.com/torvalds/linux/v5.10/arch/arm64/kernel/vdso/note.c -P arch/arm64/kernel/vdso wget https://raw.githubusercontent.com/torvalds/linux/v5.10/arch/arm64/kernel/vdso/note.S -P arch/arm64/kernel/vdso wget https://raw.githubusercontent.com/torvalds/linux/v5.10/arch/arm64/kernel/vdso/sigreturn.S -P arch/arm64/kernel/vdso wget https://raw.githubusercontent.com/torvalds/linux/v5.10/arch/arm64/kernel/vdso/gen_vdso_offsets.sh -P arch/arm64/kernel/vdso chmod +x arch/arm64/kernel/vdso/gen_vdso_offsets.sh make KERNELVERSION=5.10.110-rockchip-rk3588 modules_prepare https://github.com/armbian/build/issues/2734#issuecomment-950277542 0 Quote
skovati Posted April 13, 2023 Posted April 13, 2023 Running the above commands does indeed allow the compilation of the ZFS DKMS module to start, but for me (running a fresh install of armbian 23.02 on the orange pi 5) running apt install -t bullseye-backports zfs-dkms still results in the following error Setting up zfs-dkms (2.1.9-1~bpo11+1) ... Loading new zfs-2.1.9 DKMS files... Building for 5.10.110-rockchip-rk3588 Building initial module for 5.10.110-rockchip-rk3588 configure: error: *** None of the expected "file_fallocate" interfaces were detected. *** This may be because your kernel version is newer than what is *** supported, or you are using a patched custom kernel with *** incompatible modifications. *** *** ZFS Version: zfs-2.1.9-1~bpo11+1 *** Compatible Kernels: 3.10 - 6.1 Error! Bad return status for module build on kernel: 5.10.110-rockchip-rk3588 (aarch64) Consult /var/lib/dkms/zfs/2.1.9/build/make.log for more information. dpkg: error processing package zfs-dkms (--configure): installed zfs-dkms package post-installation script subprocess returned error exit status 10 0 Quote
Talb T Posted May 28, 2023 Posted May 28, 2023 (edited) hi, trying to compile wifi driver RTL8811AU on Orange PI 5, Armbian_22.11.4_Orangepi5_jammy_22.04_legacy_5.10.110_xfce_desktop. sudo git clone https://github.com/morrownr/8821au-20210708.git cd 8821au-20210708 sudo ./install-driver.sh I receive an error. Trying to investigate: lsb_release -a Distributor ID: Ubuntu Description: Ubuntu 22.04.2 LTS Release: 22.04 Codename: jammy uname -r 5.10.110-rockchip-rk3588 First, missing python2 and solved with sudo apt-get install python2 Then issue with modpost. Not existing. So, trying: cd /usr/src/linux-headers-5.10.110-rockchip-rk3588 sudo make modules_prepare answering to a lot of questions with the default, then scripts/Makefile.build:423: warning: overriding recipe for target 'modules.order' Makefile:1518: warning: ignoring old recipe for target 'modules.order' make[1]: *** No rule to make target 'arch/arm64/kernel/vdso/vdso.lds', needed by 'arch/arm64/kernel/vdso/vdso.so.dbg'. Stop. make: *** [arch/arm64/Makefile:194: vdso_prepare] Error 2 i'm not an expert. What's wrong , please? thanks Edited May 28, 2023 by Talb T 0 Quote
Igor Posted May 28, 2023 Posted May 28, 2023 1 hour ago, Talb T said: i'm not an expert. Why would you want to compile? This wireless chip should just work out of the box (on latest images). Perhaps you have some weird ID that is not recognised? Module info: Spoiler modinfo 88XXau filename: /lib/modules/5.10.110-rockchip-rk3588/kernel/drivers/net/wireless/rtl8812au/88XXau.ko import_ns: VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver version: v5.6.4.2_35491.20191025 author: Realtek Semiconductor Corp. description: Realtek Wireless Lan Driver license: GPL srcversion: 3B5778D3BCA8C001CE8AC1D alias: usb:v7392pA833d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v7392pA834d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2357p0106d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v20F4p809Bd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v20F4p809Ad*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2001p331Ad*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0E66p0026d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0846p9054d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v056Ep400Dd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v056Ep400Bd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0B05p1853d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0B05p1852d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0B05p1817d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0BDAp8813d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v7392pB611d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v7392pA813d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v7392pA812d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v7392pA811d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v3823p6249d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2357p0120d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2357p011Fd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2357p011Ed*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2019pAB32d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2001p3318d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2001p3314d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0E66p0023d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0846p9052d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v056Ep400Fd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v056Ep400Ed*dc*dsc*dp*ic*isc*ip*in* alias: usb:v056Ep4007d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v04BBp0953d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0411p029Bd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0411p0242d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0BDAp0823d*dc*dsc*dp*icFFiscFFipFFin* alias: usb:v0BDAp0820d*dc*dsc*dp*icFFiscFFipFFin* alias: usb:v0BDApA811d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0BDAp8822d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0BDAp0821d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0BDAp0811d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v7392pA822d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2604p0012d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2357p0122d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2357p010Fd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2357p010Ed*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2357p010Dd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2357p0103d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2357p0101d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v20F4p805Bd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2019pAB30d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2001p3316d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2001p3315d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2001p3313d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v2001p330Ed*dc*dsc*dp*ic*isc*ip*in* alias: usb:v1740p0100d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v148Fp9097d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v13B1p003Fd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v1058p0632d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0E66p0022d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0DF6p0074d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0B05p17D2d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0846p9051d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v07B8p8812d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0789p016Ed*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0586p3426d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v050Dp1109d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v050Dp1106d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v04BBp0952d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0411p025Dd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0409p0408d*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0BDAp881Cd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0BDAp881Bd*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0BDAp881Ad*dc*dsc*dp*ic*isc*ip*in* alias: usb:v0BDAp8812d*dc*dsc*dp*ic*isc*ip*in* depends: intree: Y name: 88XXau vermagic: 5.10.110-rockchip-rk3588 SMP mod_unload modversions aarch64 parm: rtw_wireless_mode:int parm: rtw_monitor_overwrite_seqnum:Overwrite the sequence number of injected frames (int) parm: rtw_monitor_retransmit:Retransmit injected frames (int) parm: rtw_monitor_disable_1m:Disable default 1Mbps rate for monitor injected frames (int) parm: rtw_ips_mode:The default IPS mode (int) parm: rtw_lps_level:The default LPS level (int) parm: rtw_lps_chk_by_tp:int parm: rtw_max_bss_cnt:int parm: rtw_usb_rxagg_mode:int parm: rtw_dynamic_agg_enable:int parm: rtw_tx_bw_mode:The max tx bw for 2.4G and 5G. format is the same as rtw_bw_mode (uint) parm: rtw_rx_ampdu_sz_limit_1ss:RX AMPDU size limit for 1SS link of each BW, 0xFF: no limitation (array of uint) parm: rtw_rx_ampdu_sz_limit_2ss:RX AMPDU size limit for 2SS link of each BW, 0xFF: no limitation (array of uint) parm: rtw_rx_ampdu_sz_limit_3ss:RX AMPDU size limit for 3SS link of each BW, 0xFF: no limitation (array of uint) parm: rtw_rx_ampdu_sz_limit_4ss:RX AMPDU size limit for 4SS link of each BW, 0xFF: no limitation (array of uint) parm: rtw_vht_enable:int parm: rtw_vht_rx_mcs_map:VHT RX MCS map (uint) parm: rtw_rf_config:int parm: rtw_country_code:The default country code (in alpha2) (charp) parm: rtw_channel_plan:The default chplan ID when rtw_alpha2 is not specified or valid (int) parm: rtw_excl_chs:exclusive channel array (array of uint) parm: rtw_qos_opt_enable:int parm: ifname:The default name to allocate for first interface (charp) parm: if2name:The default name to allocate for second interface (charp) parm: rtw_wowlan_sta_mix_mode:int parm: rtw_pwrtrim_enable:int parm: rtw_initmac:charp parm: rtw_special_rf_path:int parm: rtw_chip_version:int parm: rtw_rfintfs:int parm: rtw_lbkmode:int parm: rtw_network_mode:int parm: rtw_channel:int parm: rtw_mp_mode:int parm: rtw_wmm_enable:int parm: rtw_vrtl_carrier_sense:int parm: rtw_vcs_type:int parm: rtw_busy_thresh:int parm: rtw_ht_enable:int parm: rtw_bw_mode:int parm: rtw_ampdu_enable:int parm: rtw_rx_stbc:int parm: rtw_rx_ampdu_amsdu:int parm: rtw_tx_ampdu_amsdu:int parm: rtw_beamform_cap:int parm: rtw_lowrate_two_xmit:int parm: rtw_power_mgnt:int parm: rtw_smart_ps:int parm: rtw_low_power:int parm: rtw_wifi_spec:int parm: rtw_full_ch_in_p2p_handshake:int parm: rtw_antdiv_cfg:int parm: rtw_antdiv_type:int parm: rtw_drv_ant_band_switch:int parm: rtw_single_ant_path:int parm: rtw_switch_usb_mode:int parm: rtw_enusbss:int parm: rtw_hwpdn_mode:int parm: rtw_hwpwrp_detect:int parm: rtw_hw_wps_pbc:int parm: rtw_check_hw_status:int parm: rtw_led_ctrl:Led Control: 0=Always off, 1=Normal blink, 2=Always on (int) parm: rtw_max_roaming_times:The max roaming times to try (uint) parm: rtw_mc2u_disable:int parm: rtw_notch_filter:0:Disable, 1:Enable, 2:Enable only for P2P (uint) parm: rtw_hiq_filter:0:allow all, 1:allow special, 2:deny all (uint) parm: rtw_adaptivity_en:0:disable, 1:enable (uint) parm: rtw_adaptivity_mode:0:normal, 1:carrier sense (uint) parm: rtw_adaptivity_th_l2h_ini:th_l2h_ini for Adaptivity (int) parm: rtw_adaptivity_th_edcca_hl_diff:th_edcca_hl_diff for Adaptivity (int) parm: rtw_amplifier_type_2g:BIT3:2G ext-PA, BIT4:2G ext-LNA (uint) parm: rtw_amplifier_type_5g:BIT6:5G ext-PA, BIT7:5G ext-LNA (uint) parm: rtw_RFE_type:default init value:64 (uint) parm: rtw_powertracking_type:default init value:64 (uint) parm: rtw_GLNA_type:default init value:0 (uint) parm: rtw_TxBBSwing_2G:default init value:0xFF (uint) parm: rtw_TxBBSwing_5G:default init value:0xFF (uint) parm: rtw_OffEfuseMask:default open Efuse Mask value:0 (uint) parm: rtw_FileMaskEfuse:default drv Mask Efuse value:0 (uint) parm: rtw_rxgain_offset_2g:default RF Gain 2G Offset value:0 (uint) parm: rtw_rxgain_offset_5gl:default RF Gain 5GL Offset value:0 (uint) parm: rtw_rxgain_offset_5gh:uint parm: rtw_rxgain_offset_5gm:default RF Gain 5GM Offset value:0 (uint) parm: rtw_pll_ref_clk_sel:force pll_ref_clk_sel, 0xF:use autoload value (uint) parm: rtw_tx_pwr_by_rate:0:Disable, 1:Enable, 2: Depend on efuse (int) parm: rtw_tx_pwr_lmt_enable:0:Disable, 1:Enable, 2: Depend on efuse (int) parm: rtw_target_tx_pwr_2g_a:2.4G target tx power (unit:dBm) of RF path A for each rate section, should match the real calibrate power, -1: undefined (array of int) parm: rtw_target_tx_pwr_2g_b:2.4G target tx power (unit:dBm) of RF path B for each rate section, should match the real calibrate power, -1: undefined (array of int) parm: rtw_target_tx_pwr_2g_c:2.4G target tx power (unit:dBm) of RF path C for each rate section, should match the real calibrate power, -1: undefined (array of int) parm: rtw_target_tx_pwr_2g_d:2.4G target tx power (unit:dBm) of RF path D for each rate section, should match the real calibrate power, -1: undefined (array of int) parm: rtw_target_tx_pwr_5g_a:5G target tx power (unit:dBm) of RF path A for each rate section, should match the real calibrate power, -1: undefined (array of int) parm: rtw_target_tx_pwr_5g_b:5G target tx power (unit:dBm) of RF path B for each rate section, should match the real calibrate power, -1: undefined (array of int) parm: rtw_target_tx_pwr_5g_c:5G target tx power (unit:dBm) of RF path C for each rate section, should match the real calibrate power, -1: undefined (array of int) parm: rtw_target_tx_pwr_5g_d:5G target tx power (unit:dBm) of RF path D for each rate section, should match the real calibrate power, -1: undefined (array of int) parm: rtw_tsf_update_pause_factor:num of bcn intervals to stay TSF update pause status (int) parm: rtw_tsf_update_restore_factor:num of bcn intervals to stay TSF update restore status (int) parm: rtw_phy_file_path:The path of phy parameter (charp) parm: rtw_load_phy_file:PHY File Bit Map (int) parm: rtw_decrypt_phy_file:Enable Decrypt PHY File (int) parm: rtw_en_napi:int parm: rtw_en_gro:int parm: rtw_iqk_fw_offload:int parm: rtw_ch_switch_offload:int 1 hour ago, Talb T said: What's wrong , please? Google or forum search can reveal things https://forum.armbian.com/search/?q=vdso.lds&quick=1 0 Quote
Talb T Posted May 28, 2023 Posted May 28, 2023 thanks, Igor. You are right. I installed the wifi adapter through sudo armbian-config and then wifi section, manage wireless networking, And module is working now. Anyway, Igor, even if I follow the workaround by nekozaki I'm stiil not able to build. For my curiosity, is the workaround not worKing? thanks 0 Quote
Igor Posted May 29, 2023 Posted May 29, 2023 4 hours ago, Talb T said: Anyway, Igor, even if I follow the workaround by nekozaki I'm stiil not able to build. This you will need to ask him. 4 hours ago, Talb T said: For my curiosity, is the workaround not worKing? I am afraid, but I can't give you that answer without spending a day / hours on the problem. You will need to invest your own time to satisfy curiosity or just enjoy working WiFi. 0 Quote
Talb T Posted May 29, 2023 Posted May 29, 2023 (edited) ok, Igor, thanks a lot. Now wifi is working. I have a wifi odroid adapter and wanted to check/reuse it if working too on the new Orange PI 5 board. After the positive check I came back to the faster ethernet connection. 🙂 For the nekozaki's workaround I will investigate deeper. Anyway, if i'm correct, in the next armbian image with OrangePi5 the kernel vdso issue should be solved. Correct? thanks Edited May 29, 2023 by Talb T 0 Quote
Igor Posted May 29, 2023 Posted May 29, 2023 3 hours ago, Talb T said: in the next armbian image with OrangePi5 the kernel vdso issue should be solved I already lost a day on this problem and I will never return to it as my next availability for pro bono action for this case is in several years. 3 hours ago, Talb T said: Correct? There are thousands of other issues https://armbian.atlassian.net/jira/dashboards/10103 (average resolving time is 450 days, because there are just a few of people that donates their time and we can't expand because of no support from your side) not just the one that hurts you. If you didn't resolve and submit a fix, then bug is probably still there but it is possible (miracle) that this problem was solved outside of this ecosystem, by Rockchip engineers that are also dealing with this particular kernel. Most of other Linux projects are nothing better then our end users. They just re-sell our work under different name and also complaining on bugs. Just like you. They are very well aware how expensive fixing bugs is. Try working for community projects full time. Then do this for several months straight ... 0 Quote
Talb T Posted May 29, 2023 Posted May 29, 2023 (edited) Hi Igor, I was not pushing. And not pushing you! 🙂 Sorry for the misleading. I was asking only info. I was not aware about you are a sw donator at Armbian for Orange PI board. For your info, I understand the strong effort of sw donators. Since not able in sw development, I already donated money to Armbian (I used Armbian high quality OS for my previous board: odroid xu4) and Zoneminder (a suirvellance tool I'm using) . Even if I didn't ask them for anything. And it's true also in this case: I was not pushing/asking for a solution, but, since I saw It's a known issue, I was asking if it will be resolved with the release of the new kernel. In any case I appreciated your very fast answer. And you were helpful: I understood the last kernel already have compiled drive for RTL8811AU and used it! thanks Edited May 29, 2023 by Talb T 0 Quote
simonswine Posted January 21 Posted January 21 I have hit this problem (on a non-dkms OS), it helped patching this symbol restriction: https://github.com/armbian/linux-rockchip/pull/142 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.